能力值:
( LV2,RANK:10 )
|
-
-
2 楼
小菜尝试着回答一下。
前面一段push是参数压栈,其中包括两个指针参数。
调用DeviceIoControl函数,并检查返回值eax。eax不为0则跳转到xx,为0则调用地址00404540处函数,后跳转到xxx。
另外,lz说的“一个跳转实现,一个没有实现”不是很理解, 猜测一下,估计知道上面这个流程就知道了。呵呵呵呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
同一部分代码执行跳转,却是出现
不同的结果。就是说你的这个
EAX 值出现了不同。 估计这个函数在校验的值是个
动态的。楼主你发现你的00810C75处执行的函数一样吗???
|
能力值:
( LV13,RANK:320 )
|
-
-
4 楼
两个test都是看前面的call执行是否成功。然后再进行相应的跳转,就相当于 if else一样,成功则如何,不成功又执行什么代码。
第一张图里面分析call根据提供的图没法分析,就不说了。
第二张图中test eax,eax 上面那个call根据提示devicetocontrol,可以看出,这个call是对设备进行操作。eax中存放的是返回值。call执行成功则返回非0,否则返回0。然后test eax,eax 是指,判断次call是否执行成功。
75改74你就可以得到想要的结果、
另外呢,两图中都是判断eax。所以,你还可以改eax的值。为0和非0。
或者,要跳转改jmp,不跳就nop掉。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢各位大侠的细心解答,不过还是没有听懂大侠们的意思,,太深奥了
|
能力值:
( LV13,RANK:320 )
|
-
-
6 楼
喏,详细给你解释一下第二幅图吧。
首先你要了解jnz/jne什么意思撒。jump not zore/jump not equal,如果结果不是0则跳转,对应的机器码就是75.
与它相反的一条指令是jz/je即 jump zore /jump equal,如果结果为0则跳转。机器代码是74.
图二中在jnz 上面一条语句是:test eax,eax
它执行的操作是:对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。
我们在来看图,在test语句上面有一个函数就是那个call <JMP.&kernel32.devicetocontrol>。函数的返回值大多数都存放在eax中(经验,不一定是这样的)。你可以根据OD提供给你的提示devicetocontrol。去百度一下这个函数是干嘛的。
帮你百度过了,它是用来对设备进行操作,具体进行了什么操作就要看传进去的参数了。
我现在直说返回值,如果执行成功,则eax不为0,失败则为0.
1.eax不为0时:
test eax,eax
eax和eax进行与运算,它的结果肯定不为0。所以,后面的jnz就会跳转。
2.eax为0时
test eax,eax
eax和eax进行与运算,它的结果肯定为0。所以,后面的jnz就不会跳转。
所以,这几句综合起来的意思就是,判断对设备进行操作是否成功。
你觉得呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
其实我是想突破他的自我保护,脱了衣服一运行就自我删除。用BP CreateFileA 调试停止在了下图的位置
Alt+F9后有到了下图的位置
|
能力值:
( LV13,RANK:320 )
|
-
-
8 楼
能发程序么?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
大侠能帮忙分析下吗
|
|
|