-
-
[原创]First ReverseMe
-
发表于: 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 19
与jnz 2E
,即跳转到上图红色划线处。注意:在计算偏移地址时起始地址是跳转处下一条指令的地址。
保存修改后,重新运行该程序,输入pediy
:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课