首页
社区
课程
招聘
[原创]First ReverseMe
发表于: 2019-12-19 22:49 5273

[原创]First ReverseMe

erfze 活跃值
12
2019-12-19 22:49
5273

移去"Okay, for now, mission failed !"对话框

点击按钮后弹出一个MessageBox对话框,上面显示用户输入的字符

再弹出一个对话框,用于告知用户输入的序列号是否正确(正确:Good Number;错误:Bad Number)

将按钮标题由"Not Reversed"改为"- Reversed -"

使序列号为"pediy"

定位到创建按钮的CreateWindowsEx()函数,可以看到其中WindowName值为"Not Reversed":

双击找到其定义位置:

单击字符串所在行,Edit—>Patch Program—>Change byte...,修改为:

在数据段中找到该字符串:

可以看到sub_401110+132处有对该字符串的引用,双击之,来到代码段:

若要移动对话框,只需将call MessageBoxA替换为nop指令即可,nop指令的机器码是90,在Hex View窗口中找到call MessageBoxA对应的机器码,按F2进行修改:

修改完成后不要忘记再次F2保留更改内容。

一开始笔者以为是要添加这项功能,但后来仔细阅读反汇编后的代码,发现端倪:

jmp eax指令直接跳转到0x40123B处执行,中间弹出对话框的代码被越过,没有执行。若要恢复此功能,将jmp eax更改为nop指令即可。修改方法同上:

Edit—>Patch Program—>Apply patches to input file...保存上述修改后关闭IDA,打开OD,将断点下在GetWindowTextA()函数的下一条指令处:

F9开始执行程序,输入"1234":

单击按钮后,可以验证上述修改。下面是笔者在单步跟踪时所作记录:

与之对应的汇编指令如下:

随手写的C语言版本:

运行结果如下:

若使序列号为"pediy",那么进行计算之前的ch > '0' && ch < '9'检测应予取消,与之相对应的汇编指令:

改成nop。下面是使用C版本计算的结果:

将下图中标注部分修改为cmp edx, 7B00001h

从下图中可以看到,是由于绿色方框中的指令使得上方cmp edx, 7B00001h后的两条跳转指令失效:

将绿色方框中指令用nop替换,之后将上方cmp edx, 7B00001h后的两条跳转指令分别改为jz 19jnz 2E,即跳转到上图红色划线处。注意:在计算偏移地址时起始地址是跳转处下一条指令的地址。

保存修改后,重新运行该程序,输入pediy


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//