【文章标题】: FlashVideoStudio1.5破解版脱壳
【文章作者】: Winter[CZG][D.4s][BCG]
【作者邮箱】: spsgeyro@gmail.com
【软件名称】: FlashVideoStudio1.5
【软件大小】: 6.68 MB
【下载地址】: http://vip.hanzify.org/lordfox/MyHHOpus/todo.rar
【加壳方式】: Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks
【保护方式】: 注册码
【使用工具】: OD,PEID,IMPREC
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
很久没学习脱壳了,今日在汉化新世纪论坛逛的时候发现这个软件,遂跟着教程学脱。
由于是要汉化,但是破解文件本身又加了壳,所以先输入破解后的注册名和序列号,然后OD载入:
00829000 > 60 PUSHAD
00829001 E8 00000000 CALL FVStudio.00829006
00829006 5D POP EBP
00829007 50 PUSH EAX
00829008 51 PUSH ECX
忽略所有异常,下断BP OpenMutexA,shift+F9,来到断点处:
7C817227 > 8BFF MOV EDI,EDI
7C817229 55 PUSH EBP
7C81722A 8BEC MOV EBP,ESP
7C81722C 51 PUSH ECX
0012F770 008017B8 /CALL 到 OpenMutexA
0012F774 001F0001 |Access = 1F0001
0012F778 00000000 |Inheritable = FALSE
0012F77C 0012FDB0 \MutexName = "C64::DABECE0C5A" //记下0012FDB0这个值
ctrl+G,401000,输入如下代码:
00401000 60 PUSHAD
00401001 9C PUSHFD
00401002 68 B0FD1200 PUSH 12FDB0 ; ASCII "C64::DABECE0C5A"
00401007 33C0 XOR EAX,EAX
00401009 50 PUSH EAX
0040100A 50 PUSH EAX
0040100B E8 105A417C CALL kernel32.CreateMutexA
00401010 9D POPFD
00401011 61 POPAD
00401012 - E9 1062417C JMP kernel32.OpenMutexA
然后在401000上点击鼠标右键,选择新建OEP,然后复制数据区二进制代码:
60 9C 68 B0 FD 12 00 33 C0 50 50 E8 10 5A 41 7C 9D 61 E9 10 62 41 7C 90
继续F9,断下后取消断点,ctrl+G返回401000撤销修改,然后下断:BP GetModuleHandleA+05(这个程序BP GetModuleHandleA似乎断下后返回不对)
011EF168 /011EF7C0
011EF16C |7C822B47 返回到 kernel32.7C822B47 来自 kernel32.GetModuleHandleA
011EF170 |00000000
011EF174 |7C822B8F 返回到 kernel32.7C822B8F 来自 kernel32.7C822B40
011EF73C /011EF858
011EF740 |4C52D4A7 返回到 msctfime.4C52D4A7 来自 kernel32.GetModuleHandleA
011EF744 |011EF748 ASCII "I:\WINDOWS\system32\ntdll.dll"
0012F710 0012F778
0012F714 008008F3 返回到 FVStudio.008008F3 来自 kernel32.GetModuleHandleA
0012F718 00000000
0012F71C 7C82B3C8 返回到 kernel32.7C82B3C8 来自 ntdll.ZwOpenMutant
001294FC /0012EC44
00129500 |01217105 返回到 01217105 来自 kernel32.GetModuleHandleA
00129504 |0122BC1C ASCII "kernel32.dll"
00129508 |0122CEC4 ASCII "VirtualAlloc"
001294FC /0012EC44
00129500 |01217122 返回到 01217122 来自 kernel32.GetModuleHandleA
00129504 |0122BC1C ASCII "kernel32.dll"
00129508 |0122CEB8 ASCII "VirtualFree"
然后shift+F9,一次中断后取消断点:
00129260 /00129500
00129264 |01205FC9 返回到 01205FC9 来自 kernel32.GetModuleHandleA
00129268 |001293B4 ASCII "kernel32.dll"
alt+f9返回:
01205FC9 8B0D AC402301 MOV ECX,DWORD PTR DS:[12340AC]
01205FCF 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
01205FD2 A1 AC402301 MOV EAX,DWORD PTR DS:[12340AC]
01205FD7 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX
01205FDA 75 16 JNZ SHORT 01205FF2
01205FDC 8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
01205FE2 50 PUSH EAX
01205FE3 FF15 BC622201 CALL DWORD PTR DS:[12262BC] ; kernel32.LoadLibraryA
01205FE9 8B0D AC402301 MOV ECX,DWORD PTR DS:[12340AC]
01205FEF 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
01205FF2 A1 AC402301 MOV EAX,DWORD PTR DS:[12340AC]
01205FF7 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX
01205FFA 0F84 2F010000 JE 0120612F //Magic Jump,改成JMP,然后去01206144下断,F9运行
01206000 33C9 XOR ECX,ECX
01206002 8B07 MOV EAX,DWORD PTR DS:[EDI]
01206004 3918 CMP DWORD PTR DS:[EAX],EBX
01206006 74 06 JE SHORT 0120600E
01206008 41 INC ECX
01206144 EB 03 JMP SHORT 01206149 //在这里下断点,断下以后取消断点,撤销magic jump的修改
01206146 D6 SALC
01206147 D6 SALC
然后alt+M,在401000上下内存访问断点
0121F968 8B12 MOV EDX,DWORD PTR DS:[EDX] //在这里断下,F8单步下去
0121F96A 8955 DC MOV DWORD PTR SS:[EBP-24],EDX
0121F96D 834D FC FF OR DWORD PTR SS:[EBP-4],FFFFFFFF
0121F9D9 8B50 60 MOV EDX,DWORD PTR DS:[EAX+60]
0121F9DC 3350 44 XOR EDX,DWORD PTR DS:[EAX+44]
0121F9DF 3350 1C XOR EDX,DWORD PTR DS:[EAX+1C]
0121F9E2 2BCA SUB ECX,EDX
0121F9E4 FFD1 CALL ECX ; FVStudio.004D17BF //这里F7进去,就到OEp啦
然后lordPE脱壳,IMPREC进行修复,OEP:000D17BF,自动搜索,获取输入表以后剪切无效指针,修复。
为了完美一点可以用peditor删除.text1,.adata,.data1,.pdata四个区段,然后重建可执行文件。
运行以后跳出要求注册的NAG,由于已经脱壳,只要把他跳过即可。
查找ascII,双击username,跟踪来到:
0041A236 E8 C572FEFF CALL dumped_.00401500 //F9以后断下,注意堆栈变化
当堆栈出现如下时,F8跟踪:
0012DD60 0012E658 ASCII "HDQ"
0012DD64 0012E658 ASCII "HDQ"
00419000 8BCE MOV ECX,ESI
00419002 E8 295C0000 CALL dumped_.0041EC30
00419007 E8 F484FEFF CALL dumped_.00401500
0041900C 84C0 TEST AL,AL
0041900E 6A 00 PUSH 0
00419010 6A 32 PUSH 32
00419012 74 0B JE SHORT dumped_.0041901F //这里改成JMP后启动无NAG了
00419014 8B4E 1C MOV ECX,DWORD PTR DS:[ESI+1C]
00419017 68 83000000 PUSH 83
0041901C 51 PUSH ECX
0041901D EB 09 JMP SHORT dumped_.00419028
还有点疑问需要请教诸位大侠,脱壳完成后用PEID查看仍旧显示Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks,应该如何优化?
--------------------------------------------------------------------------------
2006年05月01日 14:44:08
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)