一.追注册码步骤解析
- 打开OllyDbg反汇编软件,对实验程序TraceMe.exe进行反汇编。
- 点击View-Executable modules查看可执行模块,在新窗口中右击,选择Show names in all modules查看名称信息。
- 输入Ctrl+F,搜索关键字:DispatchMessageW,该部分对应WM_LBUTTONDOWN消息断点,在该行右键选择Conditional breakpoint条件断点,输入条件为: [[esp+4]+4] == 0x201,这是因为Windows的msg参数WM_LBUTTONDOWN = 0x201。
- 点击调试运行(F9),此时TraceMe 动态分析技术注册对话框打开,点击用户名输入文本框,此时断点使程序暂停,再点击F9,在用户名输入框中输入姓名testname以及任意错误的序列号xuliehao,最后点击Check按钮完毕。
- 点击按钮M(Open Memory map window(Alt+M)),打开内存窗口,在代码段入口处地址0x00401000处右键,Set break-on-access(F2)下断点,F9运行,程序停在地址0x004010D0处。
- 打开另一静态反编译软件IDAPro6.6,利用其打开TraceMe.exe,点击空格键切换到图形视图,点击G跳转到指定地址,输入代码段入口地址:4010d0,查看其对应指令为sub esp, 0F4h,与OllyDbg中的反编译结果一致。
回到OllyDbg中,在地址0x004010D0处右键,Breakpoint - Toggle,下单步断点进行调试。观察右下角参数值信息如下:
F9单步执行,直至参数信息变为如下:
wParam的值变为MENU/BN_CLICKED,表示按钮已经被点击。转至IDAPro6.6对执行代码块进行访问追踪,点击Set note coler对代码块涂色,跟踪红线False分支到达如下代码块:
点击空格切换代码视图,观察到该代码块的地址为0x0040119C,将其复制下来。- 在OllyDbg中右键Go to - Expression(Ctrl+G),转到地址0x0040119C,下断点,运行F9。
- 在IDAPro6.6中,观察刚才的代码块,有一句函数调用:call edi ; GetDlgItemTextA。还有一条语句push eax ;lpString,往上查看,有一句lea eax, [esp+100h+String]和push eax,可断定此即为输入的用户名的字符串;有一条语句push ecx ;lpSring,往上查看,有一句lea ecx, [esp+100h+String1]和push ecs,可断定此即为输入的序列号。
- 在OllyDbg中,运行Step over(F8),直至运行到语句LEA ECX, [LOCAL.24]处。右键点击语句LEA EAX, [LOCAL.44],Follow in Dump - Memory address,跟踪EAX存储器的地址内容,在ASCII信息中可观察到之前输入的用户名testname。继续F8执行至CALL EDI语句,然后右键LEA ECX, [LOCAL.24]语句,Follow in Dump - Memory address,跟踪ECX存储器的地址内容,在ASCII信息中可观察到之前输入的序列号内容xuliehao。
- 返回IDAPro6.6中,继续在刚才的代码块中往下跟踪红线False分支。来到关键函数调用处 call sub_401340。双击该语句,转移到新的图形视图,查看其函数调用,其中包含call ds: wsprintfA 和 call ds: lstrcmpA,点击后者,查看其内存地址为0x0040138F,复制。
- 返回到OllyDbg,跳转到地址0X0040138F,F2下断点,F9运行,此时查看参数信息,如下: