在网上看到很多朋友遇到E语言的程序,调试时却在MEMORY MAP(此处简称MM,快捷键为ALT+M)中找不到.ECODE的问题,想搜索字符串却无能为力。我也遇到了这样的问题,看到飘云阁的朋友有给出的方法:
“易语言程序到入口的方法 载入后 搜索二进制FC DB E3 就到入口了
然后就可以看到字符串了”
我试了几次,均找不到。经过自己摸索发现:
新版的ECODE已经做了很多改进,我们在MM中根本是找不到.ECODE的,那是不是就没办法了呢?其实.ECODE是没有消失的,而是被.DATA代替了,解决方法如下:
以某个小软件为例:
OD载入后,代码定位在此处:
00401000 >/$ E8 06000000 CALL 嘉年华.0040100B
00401005 |. 50 PUSH EAX ; /ExitCode
00401006 \. E8 BB010000 CALL <JMP.&KERNEL32.ExitProcess> ; \ExitProcess
0040100B /$ 55 PUSH EBP
0040100C |. 8BEC MOV EBP,ESP
0040100E |. 81C4 F0FEFFFF ADD ESP,-110
00401014 |. E9 83000000 JMP 嘉年华.0040109C
00401019 |. 52 75 6E 73 2>ASCII "Runs.dll",0
00401022 | 00 DB 00
00401023 |. 52 75 6E 73 2>ASCII "Runs.dll",0
0040102C | 00 DB 00
0040102D |. 47 65 74 4E 6>ASCII "GetNewSock",0
00401038 |. 73 6F 66 74 7>ASCII "software\Y_GUA",0
00401047 |. 5C 45 5C 49 6>ASCII "\E\Install",0
00401052 |. 50 61 74 68 0>ASCII "Path",0
00401057 |. 4E 6F 74 20 6>ASCII "Not found the ke"
00401067 |. 72 6E 65 6C 2>ASCII "rnel library or "
00401077 |. 74 68 65 20 6>ASCII "the kernel libra"
00401087 |. 72 79 20 69 7>ASCII "ry is invalid!",0
00401096 |. 45 72 72 6F 7>ASCII "Error",0
0040109C |> 8D85 FCFEFFFF LEA EAX,DWORD PTR SS:[EBP-104]
此时,ALT+M(因无法整个复制,我只好捉图如下),
将光标定位在以程序名(如嘉年华)为属主,区段为.data的那一行,然后F2设置断点,再F9运行,
程序被断在某一模块中:
1002986D 8B42 30 MOV EAX,DWORD PTR DS:[EDX+30]
10029870 83E0 01 AND EAX,1
10029873 85C0 TEST EAX,EAX
10029875 75 10 JNZ SHORT Runs.10029887
10029877 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
1002987A 51 PUSH ECX
1002987B 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
1002987E E8 5D5F0300 CALL Runs.1005F7E0
10029883 FFE0 JMP EAX
10029885 EB 0E JMP SHORT Runs.10029895
10029887 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
1002988A 52 PUSH EDX
1002988B 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
1002988E E8 4D5F0300 CALL Runs.1005F7E0
10029893 FFD0 CALL EAX
10029895 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
10029898 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
1002989B 5F POP EDI
1002989C 5E POP ESI
1002989D 5B POP EBX
1002989E 8BE5 MOV ESP,EBP
100298A0 5D POP EBP
100298A1 C2 0400 RETN 4
100298A4 55 PUSH EBP
此时,F8单步若干步(大概为9步)后,跳到如下代码处:
00420A69 FC CLD ; (Initial CPU selection)
00420A6A DBE3 FINIT ; 其实此处也就是朋友们都知道的E程序入口点,到此我们就成功了
00420A6C E8 6BFFFFFF CALL 嘉年华.004209DC
00420A71 68 240A4200 PUSH 嘉年华.00420A24
00420A76 B8 03000000 MOV EAX,3
00420A7B E8 5E000000 CALL 嘉年华.00420ADE
00420A80 83C4 04 ADD ESP,4
00420A83 E8 EACBFFFF CALL 嘉年华.0041D672
00420A88 E8 32FFFFFF CALL 嘉年华.004209BF
00420A8D E8 05BAFFFF CALL 嘉年华.0041C497
00420A92 E8 4B73FFFF CALL 嘉年华.00417DE2
00420A97 E8 6463FFFF CALL 嘉年华.00416E00
00420A9C E8 125EFFFF CALL 嘉年华.004168B3
00420AA1 E8 2A5EFFFF CALL 嘉年华.004168D0
00420AA6 E8 5AB5FFFF CALL 嘉年华.0041C005
00420AAB E8 8E84FFFF CALL 嘉年华.00418F3E
00420AB0 68 01000152 PUSH 52010001
00420AB5 E8 1E000000 CALL 嘉年华.00420AD8
00420ABA 83C4 04 ADD ESP,4
00420ABD 6A 00 PUSH 0
00420ABF E8 0E000000 CALL 嘉年华.00420AD2
00420AC4 E8 03000000 CALL 嘉年华.00420ACC
00420AC9 83C4 04 ADD ESP,4
00420ACC - FF25 FF5E4100 JMP DWORD PTR DS:[415EFF] ; Runs.1002A248
此时,你就可以利用超级字串参考来搜索字符串了,有遇到类似的朋友们,不妨去试试。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)