孤注一掷

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  逆向

逆向学习心得
摘要:地址空间布局随机化(address space layout randomization,ASLR)使用EMET工具集来关闭和启用下载地址http://technet.microsoft.com/zh-cn/security/jj653751http://www.microsoft.com/en-u... 阅读全文
posted @ 2014-09-09 16:05 孤注一掷 阅读(262) 评论(0) 推荐(0)

摘要:在逆向C++目标时,我们有时候可能会关注一个V表中到底有多少个虚函数。这种细节大概多半是与编译器实现相关。为了弄清楚这个问题,我在VS2008下写了一个简单的测试程序来探求这个问题的答案。下面是C++的测试程序源码:class IBox {public: virtual void f1() = 0; virtual void f2() = 0; virtual void f3() = 0; virtual void f4() = 0;};class Box : public IBox {protected: int id;public: Box() { id = 0; } Box(int b. 阅读全文
posted @ 2013-01-06 22:54 孤注一掷 阅读(351) 评论(0) 推荐(0)

摘要:利用CreateRemoteThread向进程注入远程代码时,一般会有以下两种做法:利用LoadLibrary在目标进程加载指定的DLL将代码复制到目标进程,然后启动这段代码上面的第二种方法其实在使用上更加灵活。因为借用该方法,我们可以灵活地自定义函数(以下简称为启动函数)的参数。其使用流程一般为:利用VirtualAllocEx / WriteProcessMemory 将启动函数的代码复制到目标进程利用VirtualAllocEx / WriteProcessMemory 将启动函数的参数复制到目标进程调用CreateRemoteThread (..., 启动函数指针, 参数指针...)来 阅读全文
posted @ 2012-11-23 15:07 孤注一掷 阅读(437) 评论(0) 推荐(0)

摘要:利用CreateRemoteThread来注入通常是个细致工作,就好比穿针引线,尤其是在嵌入汇编后,这种针线活很容易出错利用以下断点:bp CsrNewThread可以在OD中调试注入后的代码,非常方便。不过以上方法有可能在调试中不完全奏效,具体原因我还没有详细分析。在以上方法失效时,我推倒用下面的更好的方法:如果在CreateRemoteThread时,使用了将本地代码复制到目标进程的方法,那么恭喜你,你可以利用VirtualAllocEx返回的目标进程启动函数地址在OD中快速定位到入口代码。其具体步骤为:使用OD打开目标进程利用VirtualAllocEx在目标进程中分配内存利用Wirte 阅读全文
posted @ 2012-11-22 15:48 孤注一掷 阅读(710) 评论(0) 推荐(0)

摘要:在OD中,用户可以自定义函数解析,这样分析器就可以以更友好的方式来显示函数调用。不过自定义函数有一个限制,经过实际测试,OD的自定义函数只能针对简单的导出函数名称。类似于C++中Class::MemberFunc这种名称是无法解析的,使用中需要注意。另外,对于没有调试符号的CALL,也可以通过自定义标签,然后使用标签名称作为解析函数名称。当然,你的标签必须是唯一的。 阅读全文
posted @ 2012-10-31 11:40 孤注一掷 阅读(325) 评论(0) 推荐(0)

摘要:在使用WinDBG时,要加载调试符号则是使用的编译器生成的标准PDB调试库。而在OD中,有两类调试信息来源:1.PDB文件2.LIB文件其中,LIB文件在查找导入符号时,能够发挥重要的作用。下文将解释OD和VS2008使用LIB库的一些条件:1.简介例如众所周知的MFC库大量使用了DLL导出序号,因此在OD中查看这些导入信息时,都只能看到序号。为了增加可读性,可以在OD中使用 “选择导入库” 功能来加载LIB信息,这样就可以在名称表中看到DLL的原始导入名称了。在创建DLL工程时,程序员可以选择以序号输出导出函数。2.VC2008的编译设置在VC2008中,可以使用DEF文件来完成这项任务。其 阅读全文
posted @ 2012-10-17 11:00 孤注一掷 阅读(2693) 评论(0) 推荐(0)

摘要:由于大内存的普及,很多人都将操作系统升级到WIN7来获得更多的可用内存。但是升级后,OD的调试发现一些问题:1.配置经过一些测试,发现在win7 x64下,如果没有满足以下配置条件:[Settings]Ignore TRAP=0Ignore custom exceptions=0则会发生异常2.兼容性经过测试,在WIN7下将OD执行程序设置成WINDOWS XP SP3兼容模式则可正常调试32位程序。 阅读全文
posted @ 2012-10-16 20:11 孤注一掷 阅读(467) 评论(0) 推荐(0)

摘要:查看系统函数的反汇编代码时会发现开头有个"mov edi,edi"(2字节),再往前则是5个nop指令(当然这不会引人注意),可是"mov edi,edi"有什么用了.上网搜索"mov edi,edi",结果让人惊奇,据说系统函数都添加了这段"无用"的代码,为的是Hot Patching,详细内容请自行搜索.通过改写代码来挂接API时,一般是移动前几个字节加入jump指令,对于"mov edi,edi"开头的函数也习惯性的这样处理.可现在情况不同了,这7个字节提供了方便,文中提到了更好的办法,在 阅读全文
posted @ 2012-10-13 14:46 孤注一掷 阅读(2085) 评论(0) 推荐(0)

摘要:最近在研究C++的逆向,为了了解VC编译器的代码生成规则,经常自己编写测试代码,然后使用VC编译,再通过Ollydbg来查看反汇编情况。但是,由于默认程序都是生成Debug版本,中间插入了一些未优化代码,尤其是堆栈检查指令CC,不但干扰我的分析调试过程,同时在实际的第三方程序调试过程中,也很少有Debug版本,所以我需要去掉这些信息。为什么不直接使用Release版本编译呢,这是因为默认的的Release优化是很可怕的,比如我写了一些简单的类和过程调用,都会被直接优化掉的,因此为了还原真实的程序意图和流程,我决定在Debug版本下自己控制编译选项,生成我需要的二进制码。本次测试的代码很简单,如 阅读全文
posted @ 2012-10-13 01:18 孤注一掷 阅读(1111) 评论(0) 推荐(0)

摘要:转自:http://hi.baidu.com/zwegpcwvtybivxq/item/a8b7e6c15e8b15155150581f最近做了一个Windows下的异常处理模块,查阅了一些新的资料,结合我自己的理解,将一些点滴记录如下,希望对兄弟们有所帮助。一、C++标准异常也就是try、throw、catch这三个关键字。try{ …… throw <exception-data> ……}catch (<exception-declaration 1>){ ……}catch (<exception-declaration 2>){ ……}……try块中的 阅读全文
posted @ 2012-10-08 23:46 孤注一掷 阅读(3246) 评论(0) 推荐(1)

摘要:http://nosec.net/Analyze/4.htmlhttp://blog.sina.com.cn/s/blog_949a926b01012thn.htmlBAhttp://blog.csdn.net/zym_123456/article/details/3948406http://space.189works.com/home-space-uid-10143574-do-blog-id-717.html 阅读全文
posted @ 2012-09-29 09:57 孤注一掷 阅读(188) 评论(0) 推荐(0)

摘要:从VS6.0开始,微软增加了__declspec( naked )语言扩展,例如:__declspec( naked ) int func( int n ) { // Function body}此关键字的功能是禁止编译器生成函数体的前导处理和收尾处理。实际上,编译器在生成时,不在为此函数生成栈帧的维护代码序列。例如对于如下C函数:int fun(int n) { return n+1;}常规函数在生成本地机器指令时一般会生成如下的形式:int fun(int n) { push ebp mov ebp, esp // Function Body Start mov eax, ebp+8 .. 阅读全文
posted @ 2012-09-29 09:50 孤注一掷 阅读(287) 评论(0) 推荐(0)