OD修改 exe文件 成功登录,je、jmp、nop、test汇编指令分析《逆向工程》
文章目录
一、分析
FishcOD.exe打开要破解的文件
首先设置字符串断点(两个都选上),然后Ctrl+F8(自动步过)直到弹出登录窗口
GetDlgItemText是C++中的函数,调用这个函数以获得 与对话框中的控件相关的 标题或文本 。
GetWindowTextA取得一个窗体的标题(caption)文字,或者一个控件的内容
GetWindowTextA 是用ANSI编码类型时使用的API函数,对于A结尾的函数都是用的ANSI编码
如果出现输入确认登录界面后没有跳转,说明断点没有设置成功
如果断点没有设置成功,可以手工加入断点
Ctrl+G搜索user32.GetWindowTextA
,按F2设置断点
在一处在这个位置定位的话,它会自动去在它的其他相同位置也会设置断点,只要是用到了user32.GetWindowTextA
的位置,它都会设断点
点登录会跳转到另一个地方,然后F8单步步过,找到跳转位置
修改改前再看一下,和等会做对比
二、修改
方法一:暴力修改,无论输入什么都正常登录(nop)
把 jmp 和 je 位置修改成nop
即把40204B和402065改成nop
方法二:找到正确的用户名及密码并修改
在下面的地址处按Ctrl+G搜索
双击75(HEX数据),进行修改(软件原本的用户名是:username)
三、保存
四、练习:找到并暴力破解(改成nop)跳转点使其登录
je、jmp、nop、test指令等基础
nop 是 删除 跳转
je 是 条件 跳转,满足条件就跳转,不满足就不跳转
jnz 不满足 条件就跳转
jmp 是 无条件 跳转
test 命令将两个操作数进行 逻辑与 运算,并根据运算结果设置相关的标志位。
但是,Test命令的两个操作数不会被改变。运算结果在设置过相关标记位后会被丢弃。
快捷键:F2下断点、F8单步执行,F9运行,重新载入:点 << 按键 (在工具栏下方的图标栏中)
EIP是32位机的指令寄存器,Z标志位1~真,0~假(如下案例中1代表je跳转实现,0代表je跳转不实现)
判断跳转位置(登录位置)方法
这个je
跳转是上面做了一个test
。test的结果影响他的标识位,影响它的标识位:ZF,如果等于1的话它就会跳出来实现。
下面那个jmp
是无条件转移,只要到了jmp
,它就会跳到他下一行,就是它后面的编号,它要跳到那行代码去。
上面的那个je
他跳的那个位置,可以去看一下他跳的这个位置是到底是它会跳到显示错误报错的一个登陆界面,还是要显示判断它语句长短,那个登录界面。
也就是说,一步一步到F8(单步步过)到这个位置的时候,看它的运行结果里面跳出来的窗口是哪一个,如果跳出来的窗口是用户名或者是密码错误的话,那就说明他在这个test这个位置就在分析的是用户名跟密码。
所以就可以去修改这个位置,也就说不让他去跳报错的那个界面位置,用nop
来代替后就算他test完以后,也不会去跳这个位置,接着去运行他下一行,那这样的话就达到了不会弹出报错这个界面的目的。
破解步骤
按照上文手工添加断点,自动步过直到弹出输入框
输入后,点确定后自动跳转到这里:
继续按F8,直到这个位置,出现跳转。但是,jnz
不满足条件就跳转。应该是判断用户或密码长短的。不修改
继续按F8,发现跳转。在这个位置运行登录框(点红色按钮),发现弹出失败窗口,所以要改这里
修改后(无论输入什么、什么都不输入:都登录成功)
修改前后对比
题目答案