看雪论坛工具
http://www.pediy.com/tools/Compilers.htm
Dll2lib 1.4 可以将DLL文件转换成LIB文件
2ksp4
PEID查下来是 tElock 0.98b1 -> tE!
OD 载入 到GetProcAddress 的尾巴retn下断
77E80D0B E8 2975FEFF call kernel32.77E68239
77E80D10 33C0 xor eax,eax
77E80D12 EB 03 jmp short kernel32.77E80D17
77E80D14 8B45 0C mov eax,dword ptr ss:[ebp+C]
77E80D17 5F pop edi ; kernel32.77E88989
77E80D18 5B pop ebx ; kernel32.77E88989
77E80D19 C9 leave
77E80D1A C2 0800 retn 8 //这里下断
跑, 断下后, 清除断点, F8一下
发现来到处理输入表的地方
004AD574 FF95 E0BA4000 call dword ptr ss:[ebp+40BAE0] ; kernel32.GetProcAddress
004AD57A 40 inc eax ; ADVAPI32.RegCreateKeyExA
004AD57B 48 dec eax ; ADVAPI32.RegCreateKeyExA
再走走
004AD3B9 8B7E 10 mov edi,dword ptr ds:[esi+10]
004AD3BC 03FA add edi,edx ; Dll2Lib.00400000
004AD3BE 80A5 D6CC4000 FF and byte ptr ss:[ebp+40CCD6],0FF
004AD3C5 0F84 30010000 je Dll2Lib.004AD4FB
004AD3CB 80A5 D7CC4000 FF and byte ptr ss:[ebp+40CCD7],0FF
004AD3D2 0F84 23010000 je Dll2Lib.004AD4FB //这个改成jmp得到完整输入表
alt+m 对准401000段下内存访问断点
再跑, 就断在oep了
00429B16 55 push ebp
00429B17 8BEC mov ebp,esp
00429B19 6A FF push -1
00429B1B 68 584F4500 push Dll2Lib.00454F58
00429B20 68 C8F04200 push Dll2Lib.0042F0C8
00429B25 64:A1 00000000 mov eax,dword ptr fs:[0]
00429B2B 50 push eax
00429B2C 64:8925 00000000 mov dword ptr fs:[0],esp
00429B33 83EC 58 sub esp,58
00429B36 53 push ebx
00429B37 56 push esi
00429B38 57 push edi
00429B39 8965 E8 mov dword ptr ss:[ebp-18],esp
00429B3C FF15 08F34400 call dword ptr ds:[44F308]
dump 出来, 然后用ImprotREC
OEP填入29B16 点自动搜索 ,它能找到 RVA 4F000, SIZE 624
修复即可
-----------------------------------------------------
菜鸟的一些总结:
1. 壳要恢复输入表, 多会GetProcAddress API
2. 401000段下内存访问断点, 常常能直接到oep
学习
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)