首页
社区
课程
招聘
[询问]Asprotect 2.11中的Advance import protect 选项
发表于: 2005-10-17 16:02 5095

[询问]Asprotect 2.11中的Advance import protect 选项

2005-10-17 16:02
5095
我用Asprotect 2.11对记事本加壳:

发现加壳选择了advance import protect选项后,外壳不仅是对 Call  Api 加密,甚至连 Call Api 的下一句也放到外壳中加密执行了。

具体情况如下:

;//////////////////////////////////////////////////////////////////////////////////

未加壳记事本的OEP出处代码:

004010CC >/$  55            PUSH EBP
004010CD  |.  8BEC          MOV EBP,ESP
004010CF  |.  83EC 44       SUB ESP,44
004010D2  |.  56            PUSH ESI
004010D3  |.  FF15 E4634000 CALL DWORD PTR DS:[<&KERNEL32.GetCommandLineA>];这个大家比较熟悉,就说它吧
004010D9  |.  8BF0          MOV ESI,EAX
004010DB  |.  8A00          MOV AL,BYTE PTR DS:[EAX]
004010DD  |.  3C 22         CMP AL,22

;//////////////////////////////////////////////////////////////////////////////////

当加密时不选Advance import protect保护选项时候,OEP代码变成:

004010CC    55              PUSH EBP
004010CD    8BEC            MOV EBP,ESP
004010CF    83EC 44         SUB ESP,44
004010D2    56              PUSH ESI
004010D3    E8 28EFBD00     CALL 00FE0000               ;外壳执行这个Call时,会先修改调用地址00FE0000
004010D8    90              NOP                         ;这里偶为了方便观看,Nop掉一个字节
004010D9    8BF0            MOV ESI,EAX                 ;这里代码没有变化
004010DB    8A00            MOV AL,BYTE PTR DS:[EAX]
004010DD    3C 22           CMP AL,22

外壳执行时会修改004010D3处的Call时,会修改调用地址00FE0000,LoveBoom大侠就是在修改地址时下断拦截找到Api的

修改好了重新执行这个Call,最后返回到4010D9处执行 MOV ESI,EAX 这句。

我已经成功脱掉了Asprotect加壳的记事本。(未选Advance import protect选项)

;//////////////////////////////////////////////////////////////////////////////////

当加密时选Advance import protect保护选项时候,OEP代码变成:

004010CC    55              PUSH EBP
004010CD    8BEC            MOV EBP,ESP
004010CF    83EC 44         SUB ESP,44
004010D2    56              PUSH ESI
004010D3    E8 28EFBE00     CALL 00FF0000
004010D8    90              NOP                         ;这里偶为了方便观看,Nop掉一个字节
004010D9    56              PUSH ESI                    ;即使上面Nop掉一个字节,下面的代码也还是不同的
004010DA    BC 8A003C22     MOV ESP,223C008A
004010DF    75 1B           JNZ SHORT Aspr2x.004010FC
004010E1    56              PUSH ESI

大家注意,即使4010D8处Nop掉一个字节,4010D9处的代码跟原本的代码也不同,被外壳修改了。

执行到这个Call时,并没有修改004010D3 Call 00FF0000的调用地址00FF0000,执行完毕后,直接返回到4010DB处执行

而原程序中的这句代码004010D9  |.  8BF0          MOV ESI,EAX 已经找不到了,把它放到外壳的空间执行

;//////////////////////////////////////////////////////////////////////////////////

并不是每个 Call API 都会这样,给程序代码的修复带来麻烦,我还没有找到一个好的办法解决这个问题,请各位大侠指教修复的方法。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 154
活跃值: (216)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
壳处理IAT的时候,会转换API的代码到壳的空间,你需要改变这个地方令壳把API的正确地址放入到引入表中
2005-10-18 08:38
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3
这种情况很少见,但的确有
2005-10-18 08:59
0
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
4
最初由 采臣・宁 发布
壳处理IAT的时候,会转换API的代码到壳的空间,你需要改变这个地方令壳把API的正确地址放入到引入表中

我已经找到了调用API的地址,并把正确的API地址放到了输入表中

只是4010D3 CALL [<&KERNEL32.GetCommandLineA>]的下面一句

4010D9 MOV ESI,EAX好像也被放到了壳中执行

从壳中返回来时直接到了004010DB MOV AL,BYTE PTR DS:[EAX]

程序中有大概十几个Call API会这样。

也就是修负复Call API 时,还要修复Call API的下面一行代码。难道要一个一个手动修复。
2005-10-18 09:04
0
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
这个问题值得研究
2005-10-18 18:16
0
雪    币: 245
活跃值: (195)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
6
最初由 wenglingok 发布

我已经找到了调用API的地址,并把正确的API地址放到了输入表中

只是4010D3 CALL [<&KERNEL32.GetCommandLineA>]的下面一句

........


偷 code,一定有解瘁的公式,或是有一?,?照表,??原,本?的 code
  F7-->咄入 CALL XXXXXXXX,??可以找到,
下一行的 CODE,??在 RUN 完 GetCommandLineA 之後
   哕行,比蒉麻?的是,原? CODE ,是否有?型??
?必?先?原CODE 後,在?入原? CODE

可以?一patch ,作?原的工作,手??原,是下下策....
2005-10-18 20:08
0
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
7
这个调用GetCommandLineA,还是在系统Dll的空间,没有把它搬到壳空间执行

我看了一下返回结果,我电脑上返回141EE0

从DLL返回EAX=141EE0后,到ESI=141EE0,tc esi==141EE0,共执行了1800多句代码,然后就返回到4010DB了,程序不是简单的直接MOV,也是加密处理的

大概是这样:

push eax      ;eax==141EE0

……………………
省略1800多的代码

pop esi        ;这句过后第一次 esi==141EE0

我加壳的记事本看了一下,有十几的地方是这样的。我也跟过其他的地方

发现从系统DLL返回来到的不是同一个地方。

要跟出解码公式也不容易
2005-10-19 07:27
0
游客
登录 | 注册 方可回帖
返回
//