|
|
|
寻地址在这一步骤卡住了,附图求老师讲解一二。。
1.结构化异常是由编译器自动生成的代码。程序中有一个异常链表,由FS寄存器指向。 2.ESI不是固定的,由编译器决定,不同的编译器会用到不同的寄存器。 3.这个call的地址是固定的(如果你的程序代码不变)。因为你可能没有注意到call那句的机器码和下一句指令的EIP值.call后面跟的地址有需要重定位的和不需要重定位的,用重定位的是用od看有一条下划线的数据,这一般都不是自己写的函数(例如用dll的导出函数)。不需要重定位的情况下,你用call后边的数据加上call下一条指令就是call过去的地址(od显示的函数地址)。这就相当于调用函数距离call的偏移,当然是写死的了。 推荐你看:《加密与解密(第三版)》的PE结构和SEH的部分。看完了这些你就自然明白了。 |
|
如果修改OD 使得堆栈窗口跟随EBP
在OD的堆栈窗口,右键->转到EBP,不知道是不是你想要的那个意思。 |
|
求主程序加载dll后的call位置定位的原理方法
PE文件头中有文件的默认加载基址,如果加载的pe文件不在默认的加载基址,windows加载器就要对pe文件中需要重定位的数据重定位。本例中,dll函数中的首地址是需要重定位的(如果加载dll不是其默认基址),用od直接打开dll,是默认的dll加载基址,用exe来load进来的dll就不是其默认的基址了。你可以用工具例如LoadPE来看看dll的默认基址,应该是与exe的冲突了。 在PE文件中有一个基址重定位表,所有需要重定位的信息都可以在这个表中找到,具体的你研究研究PE文件的重定位相关的内容,找不到再继续问。 我是菜鸟,写的太墨迹了~ |
|
用OD修改了,怎么保存?
栈中地址0x0012a47c 是经常变化的,应该在数据窗口中找到这个栈地址存放的字符串地址(0x001acb90),然后在数据窗口修改相应的字符。 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值