1、CFF 看文件信息,显示 vc6写的
2、想找 按钮事件 对应代码:消息入口查找器 不起作用
bp MessageBoxA;什么都不填,按 test按钮
0040438B . 50 PUSH EAX ; /Style = MB_OKCANCEL|MB_APPLMODAL
0040438C . 52 PUSH EDX ; |Title = 000B0002 ???
0040438D . 51 PUSH ECX ; |Text = "\xC2\x0C"
0040438E . 6A 00 PUSH 0 ; |hOwner = NULL
00404390 . FF15 A0E34600 CALL NEAR DWORD PTR DS:[<&USER32.Message>; \MessageBoxA
找到call头
004042F0 . 83EC 64 SUB ESP, 64 下断,看到返回:
0041CC51 . 8B4424 0C MOV EAX, DWORD PTR SS:[ESP+C] 往上找到call头
0041CC30 . 8D4424 08 LEA EAX, DWORD PTR SS:[ESP+8] 下断,返回:
0040118C |. 83C4 10 ADD ESP, 10 往上找到call头
00401168 /. 55 PUSH EBP 下断,返回: (这里应该是按钮事件) 只断一次
0041CCE0 |. 5F POP EDI 往上找到call头
0041CC70 /$ 55 PUSH EBP 如果在这里下断,显示程序window时不按按钮也会被断下,可见这里应该是个消息处理call,断下后返回
00412739 |. /E9 58070000 JMP 00412E96 往上找到call头
004121F0 /$ 64:A1 0000000>MOV EAX, DWORD PTR FS:[0] 是一个switch case
用example code F8 跟,下面弹出了正确提示
004017D4 |. E8 2A1E0000 CALL 00403603
004013DC |. E8 A8080000 CALL 00401C89 // 这个call后,eax是正确的码
004013E1 |. 8945 DC MOV DWORD PTR SS:[EBP-24], EAX
下面就是做内存注册机了
开始用keymaker,发现只弹出了一部分注册码字串,不是完整的,数了下是259(103h)个字符。但正确的码有 591字节。于是想修改 keymaker的注册机。od载入,发现 00401000一段是空白的,代码在第二段 00407000,F9 执行后,发现 00401000 被填充了代码,在 ReadProcessMemory 下断,找到了读注册码的代码,在exe文件搜代码hex,搜不到,说明代码是被压缩放在exe的,执行的时候才解码出来,想在exe文件里修改buf大小是不可能了。
百度搜 内存注册机, 找到了 http://bbs.pediy.com/showthread.php?t=45821 给出了内存注册机的汇编源码
看了下,修改了几个参数,下载 RadAsm,编译后,老是提示 变量定义错误,仔细看,原来 BreakPoint dd 004013E1 地址后面少了个 h。修改后,编译得到exe,测试,能弹出正确注册码。
2、想找 按钮事件 对应代码:消息入口查找器 不起作用
bp MessageBoxA;什么都不填,按 test按钮
0040438B . 50 PUSH EAX ; /Style = MB_OKCANCEL|MB_APPLMODAL
0040438C . 52 PUSH EDX ; |Title = 000B0002 ???
0040438D . 51 PUSH ECX ; |Text = "\xC2\x0C"
0040438E . 6A 00 PUSH 0 ; |hOwner = NULL
00404390 . FF15 A0E34600 CALL NEAR DWORD PTR DS:[<&USER32.Message>; \MessageBoxA
找到call头
004042F0 . 83EC 64 SUB ESP, 64 下断,看到返回:
0041CC51 . 8B4424 0C MOV EAX, DWORD PTR SS:[ESP+C] 往上找到call头
0041CC30 . 8D4424 08 LEA EAX, DWORD PTR SS:[ESP+8] 下断,返回:
0040118C |. 83C4 10 ADD ESP, 10 往上找到call头
00401168 /. 55 PUSH EBP 下断,返回: (这里应该是按钮事件) 只断一次
0041CCE0 |. 5F POP EDI 往上找到call头
0041CC70 /$ 55 PUSH EBP 如果在这里下断,显示程序window时不按按钮也会被断下,可见这里应该是个消息处理call,断下后返回
00412739 |. /E9 58070000 JMP 00412E96 往上找到call头
004121F0 /$ 64:A1 0000000>MOV EAX, DWORD PTR FS:[0] 是一个switch case
用example code F8 跟,下面弹出了正确提示
004017D4 |. E8 2A1E0000 CALL 00403603
004013DC |. E8 A8080000 CALL 00401C89 // 这个call后,eax是正确的码
004013E1 |. 8945 DC MOV DWORD PTR SS:[EBP-24], EAX
下面就是做内存注册机了
开始用keymaker,发现只弹出了一部分注册码字串,不是完整的,数了下是259(103h)个字符。但正确的码有 591字节。于是想修改 keymaker的注册机。od载入,发现 00401000一段是空白的,代码在第二段 00407000,F9 执行后,发现 00401000 被填充了代码,在 ReadProcessMemory 下断,找到了读注册码的代码,在exe文件搜代码hex,搜不到,说明代码是被压缩放在exe的,执行的时候才解码出来,想在exe文件里修改buf大小是不可能了。
百度搜 内存注册机, 找到了 http://bbs.pediy.com/showthread.php?t=45821 给出了内存注册机的汇编源码
看了下,修改了几个参数,下载 RadAsm,编译后,老是提示 变量定义错误,仔细看,原来 BreakPoint dd 004013E1 地址后面少了个 h。修改后,编译得到exe,测试,能弹出正确注册码。
有幸能加入[C.L.G]这个组织了啊