逆向笔记 Day 1

本文为原创文章,转载或引用时必须保留本文链接和此版权声明信息:

Day 1:
笔记使根据老师的视频https://www.youtube.com/watch?v=Q5WSV5fbZ70 制作
这里是https://blog.csdn.net/yasi_xi/article/details/9263955
gdb appname 启动GDB并开始反汇编某应用
disas main 反汇编main函数

br *main+48 设置断点在main函数偏移48的位置
i b 查看断点信息
i frame 查看栈帧 详细介绍参见https://blog.csdn.net/qq_29343201/article/details/51252345
帧中的local代表局部变量指针的位置,要想访问局部变量应该用这里的地址减去一个数,这个数不是固定的需要根据具体的环境来猜测。
然后再上图中找到0x0。这个是与输入的值比较的固定的值。这个值我认为在实际操作中需要自己找出来,在这里看源代码才知道这个是0。
找到把0移动的到的寄存器,这里是$rbp-0x4.
然后用x指令查看这个寄存器指向的地址的值

首先要明白这么一个单位间换算的关系(32位机中):1 byte = 8 bit。 WORD = 4 byte DWORD = 8 byte。
对于intel处理器来讲是little endian,即一个字符串或者数字,所以内存的看法是从右向左。最左边一个byte(即两个字符)放在最大的地址上。
注意:(在32位机中)这个颠倒是以每个DWORD位一组,即把一个长字符串按DWORD长度分组, 然后对每个DWORD进行以byte为单位的颠倒.

根据ASCII来从地址中找出刚才输入的值(别忘了字符串结束符00)。加长输入的参数到指定的长度至$rbp-0x4指向的地址即可覆盖这个hasAuthenticated这个变量使值变成非零。即可完成任务。


学习过程中使用的一些学习资源:
这是一个系列的gdb逆向教程:https://blog.csdn.net/bigbug_zju/article/details/39892129
关于GDB命令的学习可以参照网上流传的Cheatsheet
GDB Cheat Sheet
关于GDB x命令的学习可以看这个页面
https://blog.csdn.net/haifeng_gu/article/details/73928545

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注