能力值:
( LV2,RANK:10 )
|
-
-
2 楼
申请两个全局变量,需要使用的时候再拿出来不就行了吗?
你要放到寄存器里和你放到变量中是一样的。
你的变量实际就是一个内存地址。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个程序是别人写的,添加不了全局变量吧。
只能反汇编,添加部分汇编代码。
能否用汇编加上全局变量?请指教
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
path他的程序,,,找一块0区域保存你的值,,想取的时候再拿出来。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我也这么想过,但是0区域我怕程序会用到。
在.data如何找到安全的区域来作为数据保存呢?
|
能力值:
( LV9,RANK:370 )
|
-
-
6 楼
引用“
程序段 1: 把某个寄存器的值,如EAX,暂时存放 到一个内存位置
程序段 2:再次把某个寄存器的值,如ECX,暂时存放到一个内存位置
程序段3:读取两个保存的值,用CMP比较
这样能不能实现?
”
如果是全局变量,可以。
如果是变量是类成员,可以。
如果是Call的内部变量,不可以。
引用“如果我选取一个固定的内存地址(00E5XXXX),在其他机器运行会不会有问题?如何添加汇编代码实现呢?”
读取一个固定地址,那要看这个地址所在的空间了,
如果是Code段,那么,用GetModuleHandle得到模块句柄,加上偏移,那么不同的机器运行,都可以这样访问。
如果这个地址是数据段,那么就不行了,每次都是动态的。在不同机器上运行,更不行。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
直接在代码段找0区, 别在程序段的中间找就可以了,别人做免杀找path位置写代码的时候,一般都是找的下面些的区域。。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
在数据段里面加数据不可以么?应该可以在数据段增加数据的吧?具体怎么加我也不太清楚,个人感觉在数据段加数据可以的
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
.code在ring3是不可写的吧?那么只能保存到.data中去
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
ring3能写.code么?写入好像会导致访问违规
|
能力值:
( LV9,RANK:370 )
|
-
-
11 楼
内存页面的属性是可以修改的,把 设置成 Read,Write,Execute就行了。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
那么直接mov dword ptr cs:[00e5xxxx],ecx这样就可以了?
|
能力值:
( LV5,RANK:60 )
|
-
-
13 楼
lz, 我回过你的帖子 建议你用windbg 加脚本实现
看来你的目的不是调试
给你以下建议,供参考
对你的 程序段1,2,3 做是程序的同一个线程三个不同时刻状态的假设, 如果非,请忽略下面的内容
1。调用栈大约有2MB 左右的可用空间, 对于绝大多数的应用程序, 栈的最低地址部分是不会用到的
2。用ebp回溯的方法找到栈的基地址 [ebp]==0 时 ebp的值
3。此时(ebp-2MB左右的数)左右的值大约就是在栈上的安全区域,该地址即供用来保存寄存器的值, 每次通过回溯后减去同样的值,能保证计算所的地址是一致的
4。如果你需要保存寄存器的地址不定,也就意味着拟每次都需要破坏不同的指令,那么要注意在自己构造的位置将破坏的指令补回去
5。我觉得上述问题最大的地方是你比较难找到足够大的0区来写自己的指令, 如果0区过于零碎,回到之复杂度剧增
前三条我觉得是比较容易实现,而且一般的调用栈是不可能用光的,所以这里还是很安全的,除非你说3段是多线程的
希望对你有帮助
|
能力值:
( LV5,RANK:60 )
|
-
-
14 楼
固定地址肯定是不安全的
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
code段可以写的。。。text段也可以。。一般path代码都是在text段里面。。。
你试试了再来。。。。path代码做法几乎都是这样。。。
|
|
|