一个服务管理软件,二次加密的
下载地址:http://it.dudu.com/xingyeguanli/jiankangyiyao/ling_chuang_yi_yuan_xin_xi_guan_li_xi_tong_113075.shtml
是EXECryptor 2.2.4 -> Strongbit/SoftComplete Development (h1) *的壳
脱完壳无法运行,高手请帮看看
设置忽略所有异常,事件停在系统断点。
---系统断点---
0169E9E9 E8 EBFEFFFF CALL lzwhis.0169E8D9
0169E9EE 05 621A0000 ADD EAX,1A62
0169E9F3 FFE0 JMP EAX
0169E9F5 E8 04000000 CALL lzwhis.0169E9FE
0169E9FA FFFF ??? ; 未知命令
0169E9FC FFFF ??? ; 未知命令
0169E9FE 5E POP ESI
0169E9FF C3 RETN
运行Bypass AntiDBG OEP-ESTO脚本。
1、出现2个异常,Shift+F9通过。
2、来到OEP。
011A8709 ^\E9 9A63FCFF JMP lzwhis.0116EAA8 ; True or fake OEP!
011A870E ^ E9 D74CFEFF JMP lzwhis.0118D3EA
011A8713 ^ E9 452FFCFF JMP lzwhis.0116B65D
011A8718 E9 F2F10300 JMP lzwhis.011E790F
011A871D E9 3CE70400 JMP lzwhis.011F6E5E
011A8722 9D POPFD
011A8723 873424 XCHG DWORD PTR SS:[ESP],ESI
011A8726 E9 2B750200 JMP lzwhis.011CFC56
011A872B C3 RETN
---解密IAT----
1、Ctrl+G:00401000,新建EIP。
2、确定加密IAT表地址。LordPE查看区段表,BSS下面的c3usshcz即加密IAT区段。
A、虚拟偏移 54D000+400000=94D000。
B、在OD数据窗口定位Ctrl+G: 94D000
C、确定IAT表开始、结束位置。
0094D331 0000 ADD BYTE PTR DS:[EAX],AL ; IATstart
0094D333 006E 58 ADD BYTE PTR DS:[ESI+58],CH
0094D336 16 PUSH SS
0094D337 0173 48 ADD DWORD PTR DS:[EBX+48],ESI
0094D33A 2001 AND BYTE PTR DS:[ECX],AL
0094D33C 63D0 ARPL AX,DX
0094D33E 1B01 SBB EAX,DWORD PTR DS:[ECX]
0094D340 57 PUSH EDI
0094D341 8E1B MOV DS,WORD PTR DS:[EBX] ;段寄存器修饰
0094D343 01FA ADD EDX,EDI
....................
0094DDB9 28D4 SUB AH,DL
0094DDBB 0200 ADD AL,BYTE PTR DS:[EAX]
0094DDBD 0000 ADD BYTE PTR DS:[EAX],AL
0094DDBF 0020 ADD BYTE PTR DS:[EAX],AH
0094DDC1 28D4 SUB AH,DL
0094DDC3 0200 ADD AL,BYTE PTR DS:[EAX]
0094DDC5 0000 ADD BYTE PTR DS:[EAX],AL
0094DDC7 0020 ADD BYTE PTR DS:[EAX],AH
0094DDC9 28D4 SUB AH,DL
0094DDCB 0200 ADD AL,BYTE PTR DS:[EAX]
0094DDCD 0000 ADD BYTE PTR DS:[EAX],AL ; IATend
0094DDCF 0000 ADD BYTE PTR DS:[EAX],AL
0094DDD1 0000 ADD BYTE PTR DS:[EAX],AL
D、修改ExeCryptor 2.xx IAT Rebuilder v1.1脚本。
mov IATstart,0094D331
mov IATend,0094DDCD
3、运行ExeCryptor 2.xx IAT Rebuilder v1.1脚本。
0094D330 00000000
0094D334 7C808FBC ASCII "NTDLL.RtlDeleteCriticalSection"
0094D338 7C80911B ASCII "NTDLL.RtlLeaveCriticalSection"
0094D33C 7C80900F ASCII "NTDLL.RtlEnterCriticalSection"
0094D340 7C809EF1 kernel32.InitializeCriticalSection
0094D344 7C809AE4 kernel32.VirtualFree
0094D348 7C809A51 kernel32.VirtualAlloc
0094D34C 7C80992F kernel32.LocalFree
0094D350 7C80998D kernel32.LocalAlloc
0094D354 7C80929C kernel32.GetTickCount
0094D358 7C80A427 kernel32.QueryPerformanceCounter
0094D35C 7C8111DA kernel32.GetVersion
0094D360 7C809728 kernel32.GetCurrentThreadId
................
IAT解密完成,脚本结束。
---转存、修复转存---
1、用PETools转存为dumped.exe。
2、用ImportREC,OEP=00DA8709,RVA=54D330
3、保存为dumped_.exe。
修复转存结束。
---还原TLS---
1、确定原TLS表地址。LordPE查看区段表,.rdata头部即原TLS表地址。 ;这里用这办法失败
2、修改TLS表RVA=00552000,保存。 ;这里把他清零先
----修复OEP---
OD载入dumped_.exe,来到伪OEP。
011A8709 ^\E9 9A63FCFF JMP lzwhis.0116EAA8 ; True or fake OEP!
011A870E ^ E9 D74CFEFF JMP lzwhis.0118D3EA
011A8713 ^ E9 452FFCFF JMP lzwhis.0116B65D
011A8718 E9 F2F10300 JMP lzwhis.011E790F
011A871D E9 3CE70400 JMP lzwhis.011F6E5E
011A8722 9D POPFD
011A8723 873424 XCHG DWORD PTR SS:[ESP],ESI
011A8726 E9 2B750200 JMP lzwhis.011CFC56
011A872B C3 RETN
Ctrl+G:00401000。
Ctrl+S:jmp 011A8709。
0093D280 .- E9 84B48600 JMP Dumped_.<模块入口点>
0093D285 . 845A 8B TEST BYTE PTR DS:[EDX-75],BL
0093D288 > 6A 00 PUSH 0
0093D28A . 6A 00 PUSH 0
0093D28C . 49 DEC ECX
0093D28D .^ 75 F9 JNZ SHORT Dumped_.0093D288
0093D28F . 53 PUSH EBX
0093D290 . 56 PUSH ESI
0093D291 . 57 PUSH EDI
0093D292 . B8 68C19300 MOV EAX,Dumped_.0093C168
0093D297 . E8 6C9EACFF CALL Dumped_.00407108
参考一 软件修复OEP。
00938968 > 55 push ebp
00938969 8BEC mov ebp, esp
0093896B B9 12000000 mov ecx, 12
00938970 6A 00 push 0
00938972 6A 00 push 0
00938974 49 dec ecx
00938975 ^ 75 F9 jnz short 00938970
00938977 53 push ebx
00938978 56 push esi
00938979 57 push edi
0093897A B8 40789300 mov eax, 00937840
0093897F E8 DCECACFF call 00407660
00938984 33C0 xor eax, eax
00938986 55 push ebp
00938987 68 F8919300 push 009391F8
0093898C 64:FF30 push dword ptr fs:[eax]
0093898F 64:8920 mov dword ptr fs:[eax], esp
00938992 A1 340C9400 mov eax, dword ptr [940C34]
00938997 8B00 mov eax, dword ptr [eax]
00938999 E8 2666B6FF call 0049EFC4
保存为dumped_A.exe。用LordPE修改已修复OEP的脱壳文件dumped_A.exe,OEP=0053D280。至此文件还无法运行!!!
====================================================================================================
OD载入dumped_A.exe,来出错的地方
00404658 . 3BF3 CMP ESI,EBX
0040465A . 7E 14 JLE SHORT Dumped_A.00404670
0040465C > 8B04DF MOV EAX,DWORD PTR DS:[EDI+EBX*8]
0040465F . 43 INC EBX
00404660 . 891D 44769400 MOV DWORD PTR DS:[947644],EBX
00404666 . 85C0 TEST EAX,EAX
00404668 . 74 02 JE SHORT Dumped_A.0040466C
0040466A . FFD0 CALL EAX
0040466C > 3BF3 CMP ESI,EBX
0040466E .^ 7F EC JG SHORT Dumped_A.0040465C
在这里循环,后出错,我在0040466A下条件记录断点EAX,出错后看记录
地址=004070D2 消息=访问违例: 读取 [00000000]
到004070D2看下
004070BC /$ 8A0D 64769400 MOV CL,BYTE PTR DS:[947664]
004070C2 |. A1 A4F09300 MOV EAX,DWORD PTR DS:[93F0A4]
004070C7 |. 84C9 TEST CL,CL
004070C9 74 26 JE SHORT Dumped_A.004070F1
004070CB |. 64:8B15 2C000>MOV EDX,DWORD PTR FS:[2C]
004070D2 |. 8B0482 MOV EAX,DWORD PTR DS:[EDX+EAX*4] ;在这里访问违例
004070D5 |. C3 RETN
004070D6 |> E8 9DFFFFFF CALL Dumped_A.00407078
004070DB |. A1 A4F09300 MOV EAX,DWORD PTR DS:[93F0A4]
004070E0 |. 50 PUSH EAX ; /TlsIndex => 0
004070E1 |. E8 6EFFFFFF CALL <JMP.&kernel32.TlsGetValue> ; \TlsGetValue
004070E6 |. 85C0 TEST EAX,EAX
004070E8 |. 74 01 JE SHORT Dumped_A.004070EB
004070EA |. C3 RETN
004070EB |> A1 70769400 MOV EAX,DWORD PTR DS:[947670]
004070F0 |. C3 RETN
004070F1 |> 50 PUSH EAX ; /TlsIndex
004070F2 |. E8 5DFFFFFF CALL <JMP.&kernel32.TlsGetValue> ; \TlsGetValue
004070F7 |. 85C0 TEST EAX,EAX
004070F9 |.^ 74 DB JE SHORT Dumped_A.004070D6
004070FB \. C3 RETN
看上面有一个比较跳转,我试着改变跳转004070C9 74 26 JE SHORT Dumped_A.004070F1改为004070C9 75 26 JNZ SHORT
Dumped_A.004070F1,重载入程序,Ctrl+G:004070C9修改运行,看到程序介面了,还是自动终止程序,不开OD运行,程序介面一出来就自动关
了,追上看下:
0093D9E8 . B1 01 MOV CL,1
0093D9EA . E8 2D8DADFF CALL Dumped_A.0041671C ;这里出现第一个异常Shift+F8过去
0093D9EF . 8D95 6CFFFFFF LEA EDX,DWORD PTR SS:[EBP-94]
0093D9F5 . 58 POP EAX
0093D9F6 . E8 79D3ADFF CALL Dumped_A.0041AD74
0093D9FB . 8D85 7CFFFFFF LEA EAX,DWORD PTR SS:[EBP-84]
0093DA01 . E8 3E55ADFF CALL Dumped_A.00412F44
0093DA06 . 8BD8 MOV EBX,EAX
0093DA08 . A1 BCC19400 MOV EAX,DWORD PTR DS:[94C1BC]
0093DA0D . E8 7EC6ACFF CALL Dumped_A.0040A090
0093DA12 . BA 09000000 MOV EDX,9
0093DA17 . 2BD0 SUB EDX,EAX
0093DA19 . 3BDA CMP EBX,EDX
0093DA1B . 0F8F 87010000 JG Dumped_A.0093DBA8
0093DA21 . 8D95 64FFFFFF LEA EDX,DWORD PTR SS:[EBP-9C]
0093DA27 . A1 C4C19400 MOV EAX,DWORD PTR DS:[94C1C4]
0093DA2C E8 87C0ACFF CALL Dumped_A.00409AB8 ;到这里F8-前进
到这里
00404A64 > \F0:FF42 F8 LOCK INC DWORD PTR DS:[EDX-8] ; LOCK 前缀
00404A68 > 8710 XCHG DWORD PTR DS:[EAX],EDX
00404A6A . 85D2 TEST EDX,EDX
00404A6C 74 14 JE SHORT Dumped_A.00404A82
00404A6E . 8B4A F8 MOV ECX,DWORD PTR DS:[EDX-8]
00404A71 . 49 DEC ECX
00404A72 . 7C 0E JL SHORT Dumped_A.00404A82
00404A74 . F0:FF4A F8 LOCK DEC DWORD PTR DS:[EDX-8] ; LOCK 前缀 这里就访问违例:写入到7C930730
00404A78 . 75 08 JNZ SHORT Dumped_A.00404A82
00404A7A . 8D42 F8 LEA EAX,DWORD PTR DS:[EDX-8]
00404A7D . E8 1EDEFFFF CALL Dumped_A.004028A0
00404A82 > C3 RETN
Shift+F8几次程序自动终止,我把7C930730也贴出来,请各位看下,教教我接下来该怎么办!!!!
7C930730---
7C930730 FFFF ??? ; 未知命令
7C930732 C2 0400 RETN 4
往上看一下就变成这样了:
7C930730 FFFF ??? ; 未知命令
7C930732 C2 0400 RETN 4
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)