能力值:
( LV2,RANK:10 )
|
-
-
27 楼
哎,第一次顶自己的贴,请加壳、脱壳高手看看。这种可能出错的情况一般是最简单最根本的错误。
不难,但是我想了几天都想不出来,应该是对操作系统执行程序的机制理解不全面。
|
能力值:
( LV9,RANK:180 )
|
-
-
28 楼
顶多 Thread 同步问题
xor [api],xxxxxxxx
nop
nop
nop
nop
push api
xor [api],xxxxxxxx
ret
中途被另一个 Thread 跑进来了
你先试着将 4 个 nop 拿掉, 成功率若升高很多, 就表示是同步问题.
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
感谢S大,有Kx人啊!
Thread 同步问题,对这个我很是不懂(就在大学课本上了解点),我最开始写的时候,中间4个nop是没有的。执行时间相当短了。
如果是这个问题,那第三种方法为什么就不会 中途被另一个 Thread 跑进来了
再次感谢, “同步”确实比“Virtualalloc所申请内存出问题了”更有说服力。
PS:由于是新手,不追求加壳强度有多大,想先把所有出问题的地方弄明白,以后才不会更浪费时间来找这些BUG。
|
能力值:
( LV9,RANK:180 )
|
-
-
30 楼
第三种方法是什么?
这个?
;push 102760B3
;xor dword ptr [esp],00420383
;retn
自己想想为什么吧
push to Stack
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
万分感谢S大。明白了点,确实..........
怪不得多是图形界面的程序出现错误。
附带我程序中遇到的另一个问题也得到解答,S大果然强大。佩服!
附,我的解决思路----针对第一种方法:
原方案:
xor [api],xxxxxxxx
nop
nop
nop
nop
push api
xor [api],xxxxxxxx
ret
api <——存储地址
新的方案:
push ebx
xor eax,eax
mov al,byte ptr [Nmuber]
inc byte ptr [Nmuber]
imul eax,4h
mov ebx,[api0]
mov [api0+eax],ebx
pop ebx
xor [api0+eax],xxxxxxxx
push [api0+eax]
xor [api0+eax],xxxxxxxx
cmp byte ptr[Number],8h
jnz Over
mov byte ptr[Number],1h
Over:
ret
Number<----计数器,初值为 01
api0 <——存储地址api0 : yyyyyyyy
DB 20h dup(?)
这个方案有问题吗,请S大再次指教。
按照上面的,改写代码后,测试了下.上面的代码是可以解决关于CPUZ的IAT加密BUG的。
鞠躬,送分,结贴。
|
能力值:
( LV9,RANK:180 )
|
-
-
32 楼
以壳 Hook API 而言, 应该没人会这么执着于采用 [mem] 的方式
大家都用 Stack 的方式, 因为各Thread的Stack是独立的. 不会出错.
(亦即你讲的第3种方法)
你现在设 8 个糟, 你能保证够用吗? 很显然的这不是治本的方法.
再说...你有没有想过这二条指令也有可能刚好发生2个Thread用到同一糟
mov al,byte ptr [Nmuber]
inc byte ptr [Nmuber]
ThreadA: 执行完 mov al,byte ptr [Nmuber] 时
刚好切到 ThreadB 也执行(执行过去)这条 mov al,byte ptr [Nmuber]
虽然机率不高, 但是是可能的.
善用 Stack 吧, 能搞出很YD的 Code.
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
晕 差距又拉大了
|
能力值:
( LV9,RANK:180 )
|
-
-
34 楼
养只小白鼠,跑轮子可装上马达变电力
接到一机械手臂, 适当的配置KeyBoard'Mouse即可成就
24小时自动刷屏机, 你每日都有 Kx 进帐
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
发贴机容易 关键是发帖没kx啊
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
回S大,写
mov al,byte ptr [Nmuber] inc byte ptr [Nmuber]
的时候我已经考虑到你说的问题了,我最终版本的时候肯定是
只读取 内存数据 到寄存器或寄存器 操作,然后只对 寄存器和堆栈 操作而不再改变内存了。
我之所以在30楼没这样说,是不想改变我第一种方法的本意。呵呵,不过还是感谢提醒
补充: ThreadA: 执行完 mov al,byte ptr [Nmuber] 时 刚好切到 ThreadB 也执行(执行过去)这条 mov al,byte ptr [Nmuber] 虽然机率不高, 但是是可能的.
仔细想下,如果这种几率发生了,那也不一定会出错;还要看那个[API]的内容是不是假值,万一再次撞上了,那就出错了。 另:我为什么不太想用堆栈方式也是因为我要弄个64位加壳软件版本,64位PE文件的运行过程中,改变堆栈 相对32位而言 是个相当容易出错的操作(特别是调用系统API的时候)---->64位程序调用系统API我还没有完全搞清楚,所以想详尽了解32位IAT加密的所有能引发BUG问题。
目前这些都是基本的IAT加密代码,更YD的方式我也会,可惜堆栈我要谨慎使用。真正有用的转换执行代码尽量用 寄存器赋值的方式搞。
|
|
|