MoleBox Pro 未注册版加壳去NAG问题(3楼公开方法)
原程序是NsPacK V3.7壳(就是前几天讨论的那个加密超强的那个程序),我加了MoleBox Pro的最新版,想研究下去NAG,分析了一下,卡到了壳区段的自效检上了。MoleBox Pro 2.2951 released on October 12, 2007
Download:http://www.molebox.com/last/MoleBoxProSetup.exe
0047B253 >E8 00000000 CALL PB_exe.0047B258 ; F8
0047B258 60 PUSHAD
0047B259 E8 4F000000 CALL PB_exe.0047B2AD ; F7
//
0047B2AD E8 5EFBFFFF CALL PB_exe.0047AE10 ; F7
//
0047AE10 8B4424 04 MOV EAX,DWORD PTR SS: ; PB_exe.0047B25E
0047AE14 50 PUSH EAX
0047AE15 8B4424 04 MOV EAX,DWORD PTR SS:
0047AE19 50 PUSH EAX
0047AE1A E8 F1FCFFFF CALL PB_exe.0047AB10 ; 这里将对文件进行效检
0047AE1F 58 POP EAX
0047AE20 E8 3B070000 CALL PB_exe.0047B560 ; NAG在这个Call出现
0047AE25 870424 XCHG DWORD PTR SS:,EAX
0047AE28 58 POP EAX
0047AE29 894424 24 MOV DWORD PTR SS:,EAX
0047AE2D 61 POPAD
0047AE2E 58 POP EAX
0047AE2F 58 POP EAX
0047AE30 FFD0 CALL EAX ; EAX即OEP
0047AE32 E8 5DAF0000 CALL PB_exe.00485D94
跟进CALL 0047AB10 :
0047AD71 8B4D F0 MOV ECX,DWORD PTR SS: ; ECX是原数据
0047AD74 83C4 0C ADD ESP,0C
0047AD77 3BC1 CMP EAX,ECX ; 第一处效检在这里
0047AD79 74 11 JE SHORT PB_exe.0047AD8C
0047AD7B 6A 00 PUSH 0
0047AD7D 6A 00 PUSH 0
0047AD7F 6A 00 PUSH 0
0047AD81 68 FB0000EF PUSH EF0000FB
0047AD86 FF15 10A04800 CALL DWORD PTR DS:[<&KERNEL32.RaiseExcep>; kernel32.RaiseException
0047AD8C 8B15 14034900 MOV EDX,DWORD PTR DS:
0047AD92 56 PUSH ESI
0047AD93 53 PUSH EBX
0047AD94 52 PUSH EDX
0047AD95 FF15 F8024900 CALL DWORD PTR DS: ; kernel32.FlushInstructionCache
0047AD9B 8B35 3CA04800 MOV ESI,DWORD PTR DS:[<&KERNEL32.LocalFr>; kernel32.LocalFree
0047ADA1 57 PUSH EDI
0047ADA2 FFD6 CALL ESI
0047ADA4 8B45 FC MOV EAX,DWORD PTR SS:
0047ADA7 50 PUSH EAX
0047ADA8 FFD6 CALL ESI
0047ADAA 8B35 6CA04800 MOV ESI,DWORD PTR DS:[<&KERNEL32.Initial>; kernel32.InitializeCriticalSection
0047ADB0 68 B80A4900 PUSH PB_exe.00490AB8
0047ADB5 FFD6 CALL ESI
0047ADB7 68 C0054900 PUSH PB_exe.004905C0
0047ADBC FFD6 CALL ESI
0047ADBE E8 9D0A0000 CALL PB_exe.0047B860 ; 若修改壳区断 程序到这里挂掉
只有运行过CALL 0047AB10,下方CALL 0047B560的数据才会出现,这时我们跟进CALL 0047B560去NAG:
0047B833 6A 00 PUSH 0 ; 或者将这里 修改为 JMP 47B83A跳过Nag
0047B835 E8 56080000 CALL PB_exe.0047C090 ; NAG在这里出现 nop掉即可
0047B83A A1 E44E4900 MOV EAX,DWORD PTR DS:
0047B83F 83C4 0C ADD ESP,0C
0047B842 85C0 TEST EAX,EAX
0047B844 74 0D JE SHORT PB_exe.0047B853
0047B846 6A 00 PUSH 0
0047B848 6A 00 PUSH 0
0047B84A 6A 00 PUSH 0
0047B84C 50 PUSH EAX
0047B84D FF15 C0044900 CALL DWORD PTR DS: ; USER32.PostMessageA
0047B853 8B45 08 MOV EAX,DWORD PTR SS:
0047B856 8BE5 MOV ESP,EBP
0047B858 5D POP EBP
0047B859 C3 RETN
程序保存后,由于壳区段的效检,导致无法运行,不清楚这个效检是如何做到的,但使用Loader即可去掉NAG(PB这个程序可能是反Loader的)。 看了下 没搞定 简单的处理掉CALL 软件不运行 Oh Yes! 搞定了:loveliness: 大家先慢慢分析 三天后我公布我的方法 爽死我了 搞了两个多小时 终于有结果了
思路公开:找到NAG的CALL是很简单的 但是为什么保存后软件就无法运行呢? 而调试到该CALL的时候就可以跳过NAG呢?
这就是值得考虑的地方,后来发现:
0047AE1A E8 F1FCFFFF CALL PB_exe.0047AB10 ; 这里将对文件进行效检
0047AE1F 58 POP EAX
0047AE20 E8 3B070000 CALL PB_exe.0047B560 ; NAG在这个Call出现
只有将CALL 0047AB10运行完毕后, 这个出现NAG的CALL 0047B560中才会有数据,所以我们要等第一个CALL运行完毕的时候用SMC打补丁来去掉NAG,剩下的就好办了,就是在壳区找一处空白地址,刚开始没把空白地址找对,走了不少弯路,还怀疑过这种思路是否可行,找对空白地址后一切就都OK了.
下方的方法仅适合与MoleBox加壳时不选择 CRC效检一项的壳,如果选择这里的话 还有过CRC效检,这我研究了一下午也没过去,汗~~ 大约修改了N处眼看就要OK了,最后又出现一个CALL,实在是搞不下去了,就放弃了,我的思路就是把第二个CALL出错的数据全部JMP出来SMC,但修改的地址数太多了,即便的OK一个,该方法也无法推广,最好的方法就是找到效检的地方然后就好办了.
带CRC效检的那个加壳文件见这里:
https://www.chinapyg.com/viewthread.php?tid=20499
https://www.chinapyg.com/attachments/20071017_cc7cb3609cef2189592bF1FxcG3PiQFw.gif
定位Nag 并确定SMC数据地址:0047B833 6A 00 PUSH 0
0047AE19 50 PUSH EAX
0047AE1A E8 F1FCFFFF CALL PB_exe.0047AB10
0047AE1F 58 POP EAX ; 修改为JMP 47AF69
0047AE20 E8 3B070000 CALL PB_exe.0047B560
0047AE25 870424 XCHG DWORD PTR SS:,EAX
0047AE28 58 POP EAX
0047AE29 894424 24 MOV DWORD PTR SS:,EAX
0047AE2D 61 POPAD
0047AE2E 58 POP EAX
0047AE2F 58 POP EAX
0047AE30 FFD0 CALL EAX
0047AE32 E8 5DAF0000 CALL PB_exe.00485D94
0047AF69 58 POP EAX ; 这里还原覆盖的数据
0047AF6A 66:C705 33B8470>MOV WORD PTR DS:,5EB ; SMC数据
0047AF73 E8 E8050000 CALL PB_exe.0047B560
0047AF78^ E9 A8FEFFFF JMP PB_exe.0047AE25 ; 返回到原CALL的下一行代码 因为返回CALL时要返回到这里
Why?CALL 0047AB10这个CALL的作用(这里不是自效检 判断失误)就是生成这个CALL 0047B560地址中的数据 所以我们即便是修改了也是徒劳
庆贺一下~/:09 搬个凳子来等着看:lol: /:L 9999 用SMC去修改0047B835 E8 56080000 CALL PB_exe.0047C090
不能运行
期待答案 等破文的不是好孩子 打PP /:014大家继续哦 独立解决 深度思考
回复 8# 的帖子
你不说搞出来,我可能还去看看,当然也可能搞不定.兄弟说搞定了,哈哈,我就睡觉去了. 原来楼上都是挑战极限的人,呵呵.我也等着答案,呵呵,家里电脑出BUG了,无法调试壳了!:loveliness:
页:
[1]
2