|
[公告]看雪论坛升级到vBulletin3.8.2
俗话说重在掺和,我也来掺和一下。 个人感觉背景颜色太浅,晃眼睛,不如原来的深色背景。 另外不习惯页面的左右两边有空白。(我的分辨率是1280X800) |
|
[求助]问个新手问题,各位前辈帮帮忙
要根据你的程序的特点来分析。 比如你说你的程序是当游戏运行时才执行判断语句,虽然我不知道你所说的判断语句是对什么进行判断,但这样的程序行为,必定会对“游戏是否运行”这一事件进行判断,如何判断呢,最容易想到的就是检查系统中有没有游戏的进程,所以它必须要去列举系统中的进程,而枚举进程最常规的方法也就那几个系统函数,比如EnumProcesses,或者CreateToolhelp32Snapshot。 所以,这几个API是一种可能的突破点。 至于究竟是不是调用了这几个API,那只有试验过了才知道。也必须通过试验来最终将程序的执行控制于调试器中。 调试一个程序有很多方法,没有哪一种是通用的,只有自己不断总结与探索,才会有所提高。 这个ControlOfs0040000000000C88只是程序中出现的一个字符串而已,跟其它常量一样,表示什么意思是程序的作者说了算的,其它人不分析程序的话,是不容易“望文知意”的。 |
|
[求助]怎么用OllyIce中捕获点击主菜单信息事件?
点击菜单项后,通过层层的消息机制,最终会被用户定义的一个消息处理过程接收,这个消息处理过程一般是应用程序主窗口的窗口过程,而菜单项的事件通常最终是转换WM_COMMAND消息被处理的。 但是程序是各式各样的,消息具体是如何传递、如何分发、如何转换的,Windows系统的内部干了很多事。有些程序的结构比较简单,可以比较容易地找到主窗口的消息处理过程,而有的程序主窗口的窗口过程无非是另一个分发器,经过和种框架和机制,最终将消息发送到某个功能专一的函数中。 要找到这个功能专一的函数,通常是利用调试器对一些位置设置断点来实现的,直接从消息分发的机制去分析会过于复杂而难以完成的。而设置断点的理想位置就是程序中要使用的系统API或其它库函数。 |
|
[求助]问个新手问题,各位前辈帮帮忙
OD是调试器,你要查看程序的运行过程,需要想办法让程序在调试器里中断下来。 你直接F9运行,调试器对程序就失去了控制了。 你要先搞搞清楚调试器的用法和原理,再来调试程序。 |
|
[求助]关于结构化异常代码的问题??
SEH的机制,是一个SEH记录的链表,每个记录都有一个异常处理函数指针,链表的头由FS:[0]指示。 当发生异常时,操作系统将会顺着SEH链表,依次调用其中的异常处理函数,如果异常处理函数返回EXCEPTION_CONTINUE_EXECUTION,系统认为异常已经被处理过了,系统会重新调度发生异常的线程开始运行;如果一个异常处理函数返回EXCEPTION_CONTINUE_SEARCH,系统认为这个函数没有处理异常,它就取出链表中下一个记录,并重复上面的过程,直到有一个异常处理函数处理过了所发生的异常(重新调试线程运行),或者直到所有的异常处理函数都被调用过了(则调用UnhandledExceptionFilter) 要理解f9与shift+f9的区别,你需要了解ring3调试器的原理。 ring3调试器的本质就是被调试进程的异常发生时,调试器会获得两次处理异常的机会,一次叫FirstChance,另一次叫LastChance。FirstChance是在进程自身的异常处理函数被调用之前,而LastChance是在进程自身所有的SEH处理程序之后。 也就是说调试器本质上相当于在正常的SEH链表的头和尾各插入一个节点。 F9表示异常已经被处理了,也就是用DBG_CONTINUE 为参数调用ContinueDebugEvent()了,相当于SEH处理程序返回EXCEPTION_CONTINUE_EXECUTION;相反Shift+F9则是用DBG_EXCEPTION_NOT_HANDLED来调用ContinueDebugEvent()了,相当于EXCEPTION_CONTINUE_SEARCH。 |
|
[求助]昨天用IDA和OD查一个软件vbsedit
这个问题已经说过不计其数了。 不要下按钮的鼠标消息断点,要下父窗口的WM_COMMAND消息断点。 其中原因,Windows程序写多了自然就会明白。Button类是系统类,除非进行过子类化或超类化,否则它的消息处理由系统自动完成。应用程序自己只要对控件发来的WM_COMMAND消息进行处理就对了。 |
|
[求助]大家帮忙推荐个脱壳修复工具吧
一直都在用ImportRec |
|
[求助]窗口显示状态改法问题
这个函数只是一个包装函数,Ctrl+f9返回,看看参数最初是从哪里来的。 |
|
[求助]如何用delphi 对其它程进行反汇编修改
如果已经进入了目标进程的地址空间,事情就比较简单了。 以下代码没有经过测试,仅供参考,注意红字部分需要根据具体程序进行修改: // 这是要修改的地址 const void* patchAddress = 0x510bed; // 这是下一条指令的地址,我们的代码执行完成后要回到这里 const void* nextInstructionAddress = [COLOR="Red"]0xXXXXXXXX[/COLOR]; // 这是自已的代码 __declspec(naked) void MyHook(void) { __asm { // [COLOR="Red"]这里要先补上被JMP指令破坏的指令[/COLOR] mov dword ptr [ecx+0x66], 1 push nextInstructionAddress retn } } // 执行这个函数来修改代码 void InstallPacth(void) { *(BYTE*)(patchAddress) = 0xE9; // opcode of JMP *(DWORD*)(patchAddress+1) = (DWORD) ((void*)MyHook - (patchAddress + 5)); // offset of JMP } |
|
[讨论]OD 反调试 讨论?这是什么原理?[已解决]
记错了,准确的API名是CreateToolhelp32Snapshot() |
|
[讨论]OD 反调试 讨论?这是什么原理?[已解决]
这样看来它应该是检测是否存在调试器进程,而不是检测自己是否被调试。 在遍历系统进程的API下断点,如EnumProcesses(),CreateToolhelpSnap(),Process32First(),Process32Next()等,看看有没有新发现。 |
|
[求助] 一个小问题,什么时候使用ZwCreateDirectoryObject
是“对象目录”,而不是“设备目录”。 目录是用来将内核对象放在一个名字空间中从而使对象可以被访问的。 对象目录与文件系统中的目录的作用类似,就是为了组成层次化的名字空间结构。 如果创建的设备对象需要放在一个命名的目录中,而这个目录不存在,就要先创建;如果对象要放在一个已经存在的目录中,就不用创建目录了。 大概是这样的。我的内核编程还没入门,说错的话请指正。 |
|
[求助]如何用delphi 对其它程进行反汇编修改
如果你想直接修改程序代码,这两条指令的长度不同。 “mov [ecx+0x66],eax” 是3个字节,而“mov dword ptr [ecx+0x66],1” 是8个字节。所以,必须通过jmp的方式来实现。 而且你在自己的程序中asm的代码,并不对其它进程产生任何影响啊! 你要实现自己控制写入的值,可以通过修改CONTEXT中的EAX来间接地实现。 或者,通过直接将机器码写入目标进程的代码段中来实现。 你用asm写的代码是在自己的进程中,不是在目标进程中。 |
|
|
|
MCS-51指令
我怎么没见过这条指令呢?等下我查查手册。 |
|
有关MCS-51的lst文件
首先,汇编语言是特定于机器硬件的,51与x86根本不存在对应关系。 其次,阅读汇编语言的前提,是自己对汇编语言的平台是了解的,不管是x86还是51或者是68K还是MIPS。如果你没学过51的程序设计,那要读懂别人的汇编程序是很难的。这跟x86一样。 其实,如果对x86比较熟悉的话,会发现51的汇编语法格式是相似的,你只要去学习一下51的寄存器定义,PSW的含义,以及常用的程序流程控制的结构,如散转、循环等,相信读懂它的算法不是难事。 况且,LST文件是从源码生成的,相比从BIN生成的反汇编代码,阅读起来已经是相当轻松了。 |
|
[求助]0D中 F9 F12
原理嘛,就是堆栈中保存着函数调用树的一条路径,从堆栈上一级一级地展开,相当于返回调用函数的上一级。 因为当前暂停的位置肯定是在系统领空的位置,而用户代码对系统的调用点,离它的核心代码通常不太远,所以一层一层展开后回到的代码位置应该与核心代码很近了。 如果你一个问题理解了,第二个问题自然就明白了。 通常可以在F12后,直接ALT+F9,然后点击“确定”,OD就会断在函数返回用户代码的位置了。 |
|
[求助]对jesterjy大哥的精华文章里的一个问题?
库(LIB)的连接,有静态和动态两种方式。 对于LIBC.LIB,其中的函数是静态连接的,也就是库函数的代码直接嵌入到最终的可执行文件中。 对于MSVCRT.LIB,则是动态连接的,也就是在运行时导入MSVCRT.DLL的函数。 对于动态连接的库函数,可以通过导入表直接获取函数的名字;对于静态连接的函数代码,IDA通过SIG文件进行识别。 |
|
[求助]IDA 反编译出的文件中*MK_FP(__FS__, 0)什么意思啊
就是安装SEH句柄。 |
|
|
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值