首页
社区
课程
招聘
[讨论]天草初级班第16课的一点疑问
发表于: 2009-5-4 13:49 9267

[讨论]天草初级班第16课的一点疑问

2009-5-4 13:49
9267
吉祥天传世外挂 1.0.0.1

首先PEID查壳是Armadillo 3.78 -> Silicon Realms Toolworks,其实是4.X的版本,而且是个双线程的标准壳!

下面具体的步骤就不写了,就写一些重点吧!

我是在2000下操作的,不知道在XP下是不是好搞点,呵呵

忽略所有异常,手动添加C000001E,E06D7363异常。隐藏OD!

一、双变单(使程序把自己当成子进程运行)

bp OpenMutexA

Ctrl+G:00401000

00401000      60               pushad
00401001      9C               pushfd
00401002      68 A0FD1200      push 12FDA0                        ; ASCII "44C::DA47D45903"
00401007      33C0             xor eax,eax
00401009      50               push eax
0040100A      50               push eax
0040100B      E8 E694A677      call KERNEL32.CreateMutexA
00401010      9D               popfd
00401011      61               popad
00401012    - E9 8F9FA777      jmp KERNEL32.OpenMutexA
在00401000这里写下这些代码。到底是为何?不用写不行吗??难道种做法是穿山甲壳带专利吗?此种做法是否是为了欺骗壳?

60 9C 68 A0 FD 12 00 33 C0 50 50 E8 71 8D A8 77 9D 61 E9 74 8E A8 77

二、避开Anti

he OutputDebugStringA
中断2次!
选中%s%之类的字符,点右键->二进制->使用00填充

删除此断点!
he OutputDebugStringA这条函数是什么意思呢?有什么作用?怎么知道有anti?为何中断2次?试着来的?

三、Magic Jump,避开IAT加密

PS:很奇怪的就是用he GetModuleHandleA+5,却找不到Magic Jump!

bp GetModuleHandleA/he GetModuleHandleA

77E80B1A KE>  55               push ebp  //断下,取消这个断点
77E80B1B      8BEC             mov ebp,esp
77E80B1D      837D 08 00       cmp dword ptr ss:[ebp+8],0
77E80B21      75 0E            jnz short KERNEL32.77E80B31  //F2下断,Shift+F9,断下!注意堆栈!
77E80B23      64:A1 18000000   mov eax,dword ptr fs:[18]
77E80B29      8B40 30          mov eax,dword ptr ds:[eax+30]
77E80B2C      8B40 08          mov eax,dword ptr ds:[eax+8]

001292A4    /0012EBB0
001292A8    |01066AC2    返回到 01066AC2 来自 KERNEL32.GetModuleHandleA
001292AC    |0107BD6C    ASCII "kernel32.dll"
001292B0    |0107DDAC    ASCII "VirtualAlloc"

001292A4    /0012EBB0
001292A8    |01066ADF    返回到 01066ADF 来自 KERNEL32.GetModuleHandleA
001292AC    |0107BD6C    ASCII "kernel32.dll"
001292B0    |0107DDA0    ASCII "VirtualFree"

00129008    /001292A8
0012900C    |01055A99    返回到 01055A99 来自 KERNEL32.GetModuleHandleA
00129010    |0012915C    ASCII "kernel32.dll"  //取消断点,返回!

01055A99      8B0D 6C500801    mov ecx,dword ptr ds:[108506C]  //返回到这里!
01055A9F      89040E           mov dword ptr ds:[esi+ecx],eax
01055AA2      A1 6C500801      mov eax,dword ptr ds:[108506C]
01055AA7      391C06           cmp dword ptr ds:[esi+eax],ebx
01055AAA      75 16            jnz short 01055AC2
01055AAC      8D85 B4FEFFFF    lea eax,dword ptr ss:[ebp-14C]
01055AB2      50               push eax
01055AB3      FF15 B8620701    call dword ptr ds:[10762B8]        ; KERNEL32.LoadLibraryA
01055AB9      8B0D 6C500801    mov ecx,dword ptr ds:[108506C]
01055ABF      89040E           mov dword ptr ds:[esi+ecx],eax
01055AC2      A1 6C500801      mov eax,dword ptr ds:[108506C]
01055AC7      391C06           cmp dword ptr ds:[esi+eax],ebx
01055ACA      0F84 2F010000    je 01055BFF //Magic Jump,改jmp!
01055AD0      33C9             xor ecx,ecx
01055AD2      8B07             mov eax,dword ptr ds:[edi]
01055AD4      3918             cmp dword ptr ds:[eax],ebx
01055AD6      74 06            je short 01055ADE
01055AD8      41               inc ecx
01055AD9      83C0 0C          add eax,0C

往下拉,找如此类似的序列(一个jnz,一个jmp,两个salc/Magic Jump)
也可以这样做:Ctrl+F在当前位置查找命令: salc

01055C0E    ^\0F85 49FEFFFF    jnz 01055A5D
01055C14      EB 03            jmp short 01055C19  //F2下断,Shift+F9,断下!取消断点!
01055C16      D6               salc
01055C17      D6               salc

重要:断下后,记得要撤消Magic Jump处的修改!

为何要这样做?我发现程序在下面会依据原先的代码进行解码,
以前下 硬件断点 操作没有修改原代码,所以解码正确。
而直接修改Magic Jump后改变了原先的代码,导致解码不正确而异常出错!
现在我们在解码以前恢复原先的代码,因此就不会再出错了!
GetModuleHandleA这条函数又是做什么用?是什么意思呢?
还有判断返回时机。所有加壳程序的返回时机都是这样判断带吗?即:001292B0    |0107DDAC    ASCII "VirtualAlloc 001292B0    |0107DDA0    ASCII "VirtualFree"00129010    |0012915C    ASCII "kernel32.dll"  //取消断点,返回!
还有就是这么知道有对代码进行检测?是否只要和
01055C0E    ^\0F85 49FEFFFF    jnz 01055A5D
01055C14      EB 03            jmp short 01055C19  //F2下断,Shift+F9,断下!取消断点!
01055C16      D6               salc
01055C17      D6               salc
这个类型相似 2个salc就是吗?那句代码是检测代码完整性带?XOR ECX,EXC这句代码是检查代码完整性带吗?


希望各位大大来解答一下~

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (25)
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
LZ,那个地址失效了,你哪里下的,可以发下吗
2009-5-4 16:17
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
判断返回时机要特别注意堆栈,一般是一个大的缓冲后三次就到返回时机了
你认真看视频吧,要随时注意删除断点和返回程序领空
你的问题太多了
我都不知道从哪说起
2009-5-4 17:29
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
xinghong姐?
拜托。。。那个教程只是一味的说。该跳了。该下断了。该写什么什么代码了。该返回了。。。
搞的我好迷糊。。。。
2009-5-4 21:25
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我倒。这么大的一个坛子。这么没人来解决??

难道这里是酒坛子?都喝高了?不想说话了么?

那位大大来指点一下。。助人为快乐之本嘛~我先膜拜一下!
2009-5-6 10:53
0
雪    币: 8150
活跃值: (3301)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
先从基础学起吧,不然你还是看不懂,别人解释你也听不懂,记得天草教程里这些都说的很清楚的
2009-5-6 11:30
0
雪    币: 657
活跃值: (515)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我也同样初学~
2009-5-6 11:34
0
雪    币: 611
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
第一个问题:
这要涉及到有关线程的相关知识。
看patch的代码:
pushad     
pushfd   //前面2句是保存现场
push ecx                           
xor eax,eax
push eax
push eax
call kernel32.CreateMutexA  //看这几句:eax = CreateMutex( NULL, FALSE, ECX);
popfd
popad   //恢复现场
jmp kernel32.OpenMutexA  //// 跳回OpenMutexA


该patch代码的作用就是在OpenMutexA函数加载前建立好互斥对象,让Armadillo无法建立多进程。
这就是为什么这样patch代码的原理

第二个问题和第三个问题:怎么发现的,为什么中断2次等等问题,这都是前人跟踪调试所总结的方法,想知道为什么,就自己手动调试下吧。比如第三个magic jump的方法,你完全可以不用这种方法来进行IAT加密处理。方法有很多,不过这种方法很方便,也很实用,所以一直沿用了这种。
2009-5-6 11:38
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
9
为啥天草班的学生,不去问天草啊?
2009-5-6 14:44
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
8楼的老师谢谢了。
不过天草他老人家忙。不好意思麻烦他。在说了。我是个P啊?我问他。他就来回答了?

经过8楼的解释。我已经明白大半。主要还是对API函数不了解。在脱壳调试的过程中需要了解一些API函数。可是。找了不少。都是英文的。。我只知道英文的一,二,三怎么写。其他都不懂。英文白痴了。。不明白函数的意思和作用。就不知道为什么要要调用这些函数。和下了这个断点的函数有什么用。失败啊。。。

且搞脱壳破解要有一定的编程知识。VB和易语言都接触过。但只是了解一点。都还没入门。也没老师帮忙。所以在看雪论坛瞎晃。希望老师们多多帮忙啊。

另外那里有PAI函数的中文解释??英文是一点看不懂。

天草老师的教程里。只要稍加解释一下这个函数的作用和意思。我也不用搞的一头雾水了。。
2009-5-6 15:38
0
雪    币: 256
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
另外那里有PAI函数的中文解释??英文是一点看不懂。
2009-5-6 15:45
0
雪    币: 147
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
楼主的第二,第三个问题,问的是为什么这要做,
这是大牛把壳的代码研究透了之后,想出来的比较好的办法,

我知道楼主是想知道为什么这个在这适用,其他壳不适用,

简单的说,壳是什么?壳就是附在EXE上,优先加载的一段代码,对于同一个加壳软件版本,每一次加载的代码差不多是一样的,所以研究透了,就直接搞方法操作了。

研究一款新壳是需要大量的基础知识的,没有一通百通的方法,因为壳的作者想法不同,破解的就不同
2009-5-6 21:22
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我 K A O!
楼上的真是明白人啊!

主要就是想知道怎么分析壳的。并不想课程里只说。该断点了。该跳了。该写代码了。这样头晕。。
2009-5-6 21:27
0
雪    币: 104
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
多看帖子,同样的壳应该有很多贴子的,在网上找找,帖子比视频清楚,视频都是他们调试过老多次以后才作出来的,这样,他们熟谙于心,所以,知道那点事干嘛那点,但是我们刚接触这个壳,不能够全搞懂,多调试,多看帖子,应该可以懂~~贴子比视频易懂!
2009-5-7 10:47
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
多调试,多看帖子,贴子比视频易懂!
2009-5-7 18:59
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
慢慢来!   不是灌水...
2009-5-7 19:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
谢谢大海的问题,还有8楼,12楼
2009-5-8 11:30
0
雪    币: 205
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
纯属职业罐水,,楼主的问题太深,不懂
2009-5-8 13:14
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
自己跟着破一下嘛 API函数 自己去查一下嘛 世界上有个东西叫百度
2009-5-9 19:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
呵呵 我才到 4呢   倒时候看到了  再 回来看看  希望不会太迟
2009-5-9 22:37
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
下什么断点。都是前人总结出来的。我的理解是这样的   为什么下那些断点。应该都是对API函数的了解吧
2009-5-10 17:05
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
脱壳不是一成不变的  以后还得自己多总结    我现在的理解  单步其实往深了说。就是了解每条执行都做什么
2009-5-10 17:06
0
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
我刚下完他的教程,才看几节课,还没消化了呢
2009-5-11 00:41
0
雪    币: 173
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
师兄的英文更好,PAI
2009-7-8 21:11
0
雪    币: 265
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
pai不知道,api的东西我这里有一个
不知道合不合口味
上传的附件:
2009-7-13 08:56
0
游客
登录 | 注册 方可回帖
返回
//