【加壳方式】Armadillo1.xx-2.xx->SiliconRealmsToolworks
【操作系统】WindowsXP
【破解工具】PEID,OllyDbg,LordPE,ImportREC
【破解声明】破解完全出于兴趣,无任何商业目的。
1、用PEID载入程序gameserver.exe,显示为Armadillo1.xx-2.xx->SiliconRealmsToolworks加密
2、用OllyDbg1.10版打开程序supmail.exe后,OD停在:
00578049<模块入口点>/$55PUSHEBP ;停在这里!
0057804A|.8BECMOVEBPESP
0057804C|.6AFFPUSH-1
0057804E|.6848D25900PUSHsupmail.0059D248
00578053|.68907A5700PUSHsupmail.00577A90;SE handlerinstallation
00578058|.64:A100000000MOVEAXDWORDPTRFS:[0]
0057805E|.50PUSHEAX
上面看到的00578049<模块入口点>并不是真正的程序入口地址!然后用插件隐身OD,并且在选项->调试设置->异常里忽略所有异常。
3、用命令行插件下断BPOpenMutexA,按F9运行程序,不出意外的话,程序应该在一个OpenMutexA断点出停住,得到的汇编代码如下:
7C80EC1BOpenMutexA8BFFMOVEDIEDI ;中断在这里!
7C80EC1D55PUSHEBP
7C80EC1E8BECMOVEBPESP
7C80EC2051PUSHECX
7C80EC2151PUSHECX
7C80EC22837D1000CMPDWORDPTRSS:[EBP+10]0
7C80EC2656PUSHESI
7C80EC270F847A500300JEkernel32.7C843CA7
7C80EC2D64:A118000000MOVEAXDWORDPTRFS:[18]
7C80EC33FF7510PUSHDWORDPTRSS:[EBP+10]
按下alt+k打开堆栈查看:
调用堆栈:主线程
地址堆栈函数过程/参数调用来自结构
0012F79807CC90F5kernel32.OpenMutexAGameServ.07CC90EF0012FF00
0012F79C001F0001Access=1F0001
0012F7A000000000Inheritable=FALSE
0012F7A40012FDD8MutexName="474:A22D56583"
0012FF0407CC986CGameServ.07CC904BGameServ.07CC98670012FF00
0012FF0C07CCA086GameServ.07CC9864GameServ.07CCA0810012FF08
0012FF3807CDD6B1GameServ.07CC9D60GameServ.<模块入口点>+0C90012FF34
0012FF3C00400000Arg1=00400000
0012FF4000000000Arg2=00000000
0012FF4400141F23Arg3=00141F23
0012FF480000000AArg4=0000000A
记录地址:0012FF48当然大家的都不一样~~
4按下Ctrl+G进行表达式的跟随,选择空间:00401000找到无数据区:
004010000000add[eax]al
004010020000add[eax]al
004010040000add[eax]al
004010060000add[eax]al
004010080000add[eax]al
0040100A0000add[eax]al
0040100C0000add[eax]al
0040100E0000add[eax]al
004010100000add[eax]al
004010120000add[eax]al
004010140000add[eax]al
004010160000add[eax]al
然后开始对刚才的堆栈进行修改,点中地址为00401000的行后,用Ctrl+E命令,修改这一片连续地址内容,输入一下内容:
0040100060PUSHAD
004010019CPUSHFD
0040100268F0FB1200PUSH12FF48;其中的12FF48,这是堆栈中看到的值,注意这里可以去了地址前的00
0040100733C0XOREAXEAX
0040100950PUSHEAX
0040100A50PUSHEAX
0040100BE82FDB407CCALLkernel32.CreateMutexA
004010109DPOPFD
0040101161POPAD
00401012-E904DC407CJMPkernel32.OpenMutexA
修改完毕后,开始在刚才修改的地址00401000处做处理,在地址00401000处单击右键,选择“此为新起源”(也有可能显示新EIP)的,
弹出对话框点击确定即可。然后按F9,再次回到断点处:
7C80EC1BOpenMutexA8BFFMOVEDIEDI ;再次中断在这里!
7C80EC1D55PUSHEBP
7C80EC1E8BECMOVEBPESP
7C80EC2051PUSHECX
7C80EC2151PUSHECX
7C80EC22837D1000CMPDWORDPTRSS:[EBP+10]0
7C80EC2656PUSHESI
7C80EC270F847A500300JEkernel32.7C843CA7
7C80EC2D64:A118000000MOVEAXDWORDPTRFS:[18]
7C80EC33FF7510PUSHDWORDPTRSS:[EBP+10]
5、好下面来取消,按F2进行取消,再次按下Ctrl+G进行表达式的跟随,来到刚才修改的00401000处,把刚才所做的修改再改回去,输入:
add[eax]al来填充,恢复那些零值。然后再次在命令行下断点:BPGetModuleHandleA,然后按F9,执行来到这里
7C80B529GetModuleHan>8BFFMOVEDIEDI ;在这设置的中断,再次按下F2取消这里的中断!!
7C80B52B55PUSHEBP
7C80B52C8BECMOVEBPESP
7C80B52E837D0800CMPDWORDPTRSS:[EBP+8]0
7C80B5327418JESHORTkernel32.7C80B54C ;重新在这里下断,按F2下断!!
7C80B534FF7508PUSHDWORDPTRSS:[EBP+8]
再次按F9运行,此时注意右下角堆栈窗口,直到出现类似一下代码时才可以停住:
0012D288/0012D514
0012D28C|00CB519BRETURNto00CB519Bfromkernel32.GetModuleHandleA;这里kernel32.GetModuleHandleA是重要信息!!
0012D290|0012D3C8ASCII"kernel32.dll"
这里来判断停下的时候的依据是:0012D290地址数组和0012D3C8都在0012D的区间里,相差小的为最好时机!!你可看仔细观察,在你按F9的其
它时候,这两组数相差甚大。
6、现在取消断点,在停止后按下F2,再用Alt+F9返回刚才的用户执行代码处。
呵呵那个神奇的万能跳转马上就来了,MagicJump我爱你!,返回后我们来到这里:
004015CC/EB10JMPSHORTsupmail.004015DE ;按F2中断在此!!!
004015CE|66:623ABOUNDDIDWORDPTRDS:[EDX]
004015D1|43INCEBX
004015D2|2B2BSUBEBPDWORDPTRDS:[EBX]
004015D4|48DECEAX
004015D5|4FDECEDI
004015D6|4FDECEDI
004015D7|4BDECEBX
004015D8|90NOP
004015D9-|E998605000JMP00907676
呵呵这个004015CC就是解开这个壳壳的关键处,可以得到真正的OEP=004015CC-00400000=000015CC。
8、打开软件LordPE,点开在path里找到gameserver.exe的进程,对它的脸上点右建,选择dumpfull,开始脱壳啦!这里LordPE会有个对话框
,请选择你要脱壳后文件的放置位置就行。完成后,还是选择gameserver.exe的进程,按下右边的PEEditor,选择你刚才脱好的程序,就是
dumped文件,修改OEP就是入口点为:(000015CC)要去所有的“0”哦!!
9、刚才调试了半天的OD没关吧(什么你关了?手还真快啊!重来!),再打开一个新的OD,载入刚刚用LordPE脱掉的dumped.exe,这次程序就
该停止了我们修改后的模块入口,得到的汇编代码如下:
004015CC<模块入口点>/EB10JMPSHORTdumped.004015DE ;中断在这里哦!!
004015CE|66:623ABOUNDDIDWORDPTRDS:[EDX]
004015D1|43INCEBX
004015D2|2B2BSUBEBPDWORDPTRDS:[EBX]
004015D4|48DECEAX
004015D5|4FDECEDI
004015D6|4FDECEDI
004015D7|4BDECEBX
004015D8|90NOP
004015D9-|E998605000JMP00907676
10、按F8单步运行至004015EE处,再点F7跟进,会发现来到这里:
00505394-FF25C4235200JMPDWORDPTRDS:[5223C4];kernel32.GetModuleHandleA
0050539A-FF25C8235200JMPDWORDPTRDS:[5223C8];kernel32.GetOEMCP对OEMCP的修改
005053A0-FF25CC235200JMPDWORDPTRDS:[5223CC];kernel32.GetPrivateProfileStringA
005053A6-FF25D0235200JMPDWORDPTRDS:[5223D0];kernel32.GetProcAddress
005053AC-FF25D4235200JMPDWORDPTRDS:[5223D4];kernel32.GetProcessHeap
下面开始计算IAT,看见DWORDPTR的参数了么:5223C4,来拿出计算器,开始:5223C4-401000=1213C4这里我们取121000!!
11、此时可以关闭第二个对dumped修改的OD打开ImportREC,在左下角的输入:
OEP:000015CC RVA:00121000 Size:00001000
然后点击“GetImport”得到输入表,然后点击右侧的“ShowInvalid”得到无效指针,之后单击右键,选择“TraceLevel1(Disasm)”,然
后单击右键选择“CutThunk(s)”最后点击下方的“FixDump”选择文件dumped.exe,在Log窗口显示修复dumped成功,并生成dump_.exe文件。
呵呵来运行吧只要你前面的步骤都对了,这里就OK了~!!
奇迹商业版破解方法
来源:
作者:
点击:
近期更新
热门推荐

