|
[求助]如何在附加数据中下断点?
不知道你从哪里得出结论这里有附加数据段。 OD已经明确指出是.data节。 还有,从数据入手分析是一个不错的主意,但还是要找到访问数据的代码。 你试过OD的超级字符串参考插件了吗??一般程序没有加密的话,用这个插件就可以找到使用字符串的代码位置。 最后的办法,就是实在没有其它办法的话,可以在数据上下数据断点,推荐使用硬件断点。在中断之后,再从堆栈中寻找函数的调用路径,或者CTRL + F9多执行几次,直到返回到所需要的代码位置。 至于哪里是需要注意的位置,这就靠你多多积累了。 |
|
[求助]OD问题?
如果程序的主窗口是个对话框,就是说是一个基于对话框的程序,可以在复选框的父窗口(一般就是主对话框)的窗口过程下消息断点,消息一般是 WM_NOTIFY,同时可以对堆栈参数数施加条件约束,使得只有在指定控件发生事件时才中断。 不过窗口过程很可能是MFC类库内部的一个函数,你还要慢慢跟一下,走到MFC框架调用用户编写函数的时候,就是分析的最佳时机了。 另外,理论上以上方法对一般程序好使,但不一定对全部程序都好使,因为有的程序员不采用标准方式编程,可能采用某些特殊技术,以达到扰乱跟踪或提高效率等目的。 |
|
[讨论]{已解决}C语言初始化话的问题,问号的都是不明白,麻烦大家了
很好,这种学习精神很好,梁肇新就特别”鼓吹“程序员从汇编一级,从机器的角度看待程序。 好,我来说说你不明白的地方。 直接写注释中了,自己看吧。我就是在你加问号的地方写了。 另外你原来的不太恰当的注释我给你更正了。 好好学习,祝你进步。希望对方你有帮助。 1: #include "stdio.h" 2: void main() 3: { 0040D6F0 55 push ebp //保存堆栈指针 0040D6F1 8B EC mov ebp,esp //这两句是标准的函数入口点,是作用是建立一个用ebp作访问基址的标准堆栈帧结构。 //如果索引值为正,访问的是函数的参数,为负为局部变量,如 ss:[ebp + 8]就是访问函数的第一个参数 0040D6F3 83 EC 48 sub esp,48h //这个是在堆栈帧上为局部变量分配空间,可以看到编译器共分配了0x48个字节给局部变量(包括保存中间结果的临时变量) 0040D6F6 53 push ebx 0040D6F7 56 push esi 0040D6F8 57 push edi //保护一些寄存器 0040D6F9 8D 7D B8 lea edi,[ebp-48h] //edi指向当前堆栈顶 0040D6FC B9 12 00 00 00 mov ecx,12h //这是全部局部变量所占用的存储空间,以DWORD为单位,所以是0x48 / 4 = 0x12 0040D701 B8 CCCCCCCC mov eax,0CCCCCCCCh //这是将堆栈中局部变量存储区全部用0xCC填充,这种初始化是DEBUG模式下编译才会生成的 //至于为什么用0xCC,这个说过很多次了,因为0xCC是int3指令的机器码 //这样就可以在程序有漏洞,比如因溢出而”飞“到数据区执行时就会触发调试异常 //而调试器可以捕获该异常从而帮助程序员除错。 0040D706 F3 AB rep stos dword ptr [edi] // 上面已经说过了,用调试模式的值初始化局部变量 4: int* x; 5: int m; 6: x=&m; 0040D708 8D 45 F8 lea eax,[ebp-8] 0040D70B 89 45 FC mov dword ptr [ebp-4],eax 7: } 0040D70E 5F pop edi 0040D70F 5E pop esi 0040D710 5B pop ebx 0040D711 8B E5 mov esp,ebp 0040D713 5D pop ebp 0040D714 C3 ret ##################################### 源程序: #include "stdio.h" void main() { int* x; int m; x=&m; } |
|
Borland C++何时加载位图
LoadResource这个API 可以先用资源分析工具查到你要找的资源的ID,然后断下时就可以快速判断是不是到了需要的地方。 另外,提个建议,试试Dede,可能会有意外收获哦,宝蓝的东西。。。 |
|
[求助]请教:地址换算问题
16位程序OD不能直接调试的,载入的ntvdm.exe,就是模拟16位运行环境的虚拟机。 |
|
[求助]谁的OD载入这个程序不自动关闭的举手,有其他调试工具打开不关的请介绍
缺少LJC1ID.dll,运行不了,OD也载入不了就。 我给你提个醒,IDA也是具有动态调试功能的,不妨试试,OD不行,没准IDA就行了。 毕竟IDA是个重量级的调试工具。 现在我机器上运行不了。 如果你能把完整的程序发上来,我可以跟你一起研究研究,呵呵。 今天看了一天数学,晕死了。 不说了,睡了,明天如果有时间再说吧。 |
|
[求助]用DEDE脱Borland Delphi 6.0 - 7.0怎么脱
正所谓一个菜鸟提的问题十个高手也无法回答。 因为菜鸟的问题描述的东西高手都看不懂。 呵呵,开个玩笑,没有任何其它意思,因为我是看到你的标题进来的,我以为你把宝蓝都当成壳的名字了。 来对你的问题提点建议,仅供参考。 宝蓝,就是Borland公司的RAD工具使用的程序框架很规范很标准,结果也导致它包含很多对逆向人员有用的信息,以及导致了专门针对它的Dede的出现。 用Dede载入程序后,它用详细地把整个程序的结构给你分析出来。 你要找到验证注册的地方,首先你知道软件的注册过程。 比如,如果主界面上有一个”注册“按钮,点下去会弹出一个注册框,而框上有一个”确定“按钮, 那好,你在Dede的窗体资源中,主界面一般都很好找,然后从中找到注册界面的窗口,然后在函数列表中,应该会有一个类似于 OnOKBtnClick这样的函数,别客气,记下它的地址,在OD(动态)或IDA(静态)中直接到这个函数处,下断点,阅读代码,跟踪,随你便了。 以上说的是比较”正规“的程序,如果你碰到一个有故意扰乱的程序,那就需要具体情况具体分析了,没有什么一两句话就能说清的”秘诀“了。主要靠自己的基础知识和经验积累了。 祝你好运。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值