|
|
[调查]难道第二版不出了?
是否现在河蟹的连这种书都不容易出了? |
|
|
[求助]无法正常下断,OD提示说是数据区下断。。有人碰到过没
应该是anti debug,你的断点被人家干掉了 |
|
|
[原创][硬件虚拟化第二弹]远离kernel的理想乡
期待楼主的下一篇 |
|
|
[原创]以虚御虚-用虚拟机调试vt程式
多谢,收藏! |
|
|
|
|
|
[原创]基于DirectX 9引擎3D游戏逆向分析及汉化修改实例
再请教一下前辈。 按我的理解,类型可以强制转化,但是类成员函数的定义其本身是隐式的,就是说参数传递的时候把类指针付给ecx这种类成员函数的调用方法,是因为编译器知道它是一个类函数,而不是那个函数的声明部分有什么特殊的可以直接复制的声明。就是说我觉得我无法声明一个函数类型,让指向这个类型的函数指针在被调用的时候能把前面的类指针传给ECX,也无法用类型转化的方式去实现lpDirect3Device9->myOutText(....)这样的call过程。 当然自己写汇编是另一回事,那就没有类型声明的这个苦恼了。 |
|
|
|
|
|
[原创]基于DirectX 9引擎3D游戏逆向分析及汉化修改实例
多谢。 不过,我问的是在没有定义一个类的情况下,如何定义一个包含this指针的类成员函数的调用,就是说比正常的函数定义多一项把 lpDirect3Device9付给ecx这个过程,这个应该怎么在C里面定义? |
|
|
|
|
|
[原创]基于DirectX 9引擎3D游戏逆向分析及汉化修改实例
请教楼主,在取得了IDirect3DDevice9指针之后,如何定义自己的drawtext的类函数类型,才能直接做例如lpDirtect3DDevice9->mydrawtext(....)这样的调用? |
|
|
本人22岁矿山临时工想学习汇编,没有基础初中毕业
想想元首是什么时候才开始政治工作的 |
|
|
|
|
|
|
|
|
[求助][讨论]研究过 Apex 的 ACDC.dat 进来吧
什么是apex啊 |
|
|
|
|
|
[原创]挣扎的菜鸟 - 当OD不能装载也不能附加程序时
我用的那个程序有点大,而且还要安装。不太方便发上来。 不过,7楼的朋友都说过了,用VMP的demo版,随便加了个程序,就是这个情况。你可以试试。 |
|
|
[原创]挣扎的菜鸟 - 当OD不能装载也不能附加程序时
接着把今天对引起溢出的具体的数据的分析发出来,请大家指正。 先还是用老办法,利用system32下的老版本的dbghelp.dll,双OD调试程序,在OllyICE中对dbghelp.dll中的68D808BF下断,OllyDbg装载程序X,这时断在68D808BF,代码为 68D808BF 8A08 mov cl, byte ptr [eax] 我们直奔eax,二进制拷贝头部的96字节如下: 03 BC A7 7E BF C1 1F F1 32 E9 E2 D7 C4 B5 89 14 78 E6 1D 2C 43 B2 7C 16 B1 5E 64 52 26 EB 1E 49 53 FB 10 11 D6 26 AE 0F FC 5B 85 18 1F 11 5A FF 26 52 9B C9 19 F5 A1 D7 D0 86 7D D6 29 B5 46 3D 53 51 2F A3 16 18 D4 4A 30 F3 90 85 1F 64 B4 F7 FB 21 01 C9 35 52 CA 48 58 CD 83 91 32 47 B0 4B 下来,在OD的目录下拷贝进去海风大牛给的dbgHelp.dll,启动OD,直接装载程序X,这时就停在了系统入口处,打开内存窗口,二进制搜索上面的96字节,在0080791E处找到,且整个内存中只找到这一个,OK,肯定就是这个地方了。 这时要分析一下这个地址是做什么用的了,我们打开IDA,查看0080791E,没有直接的引用,由于是在装载时引起的dbghelp.dll溢出的,所以,估计这个地址应该是从PE头数据中引出的,也许应该查找RVA 0040791E,在OD中二进制搜索,在008074BA 处发现如下: 008074BA 1E 79 40 00 3B 85 40 00 5D 85 40 00 81 85 40 00 y@.;匑.]匑.亝@. 008074CA A6 85 40 00 CE 85 40 00 FA 85 40 00 19 86 40 00 @.螀@.鷧@.咢. 后面好像都是RVA值,在IDA中设置数据类型为RVA,显示如下: .text2:008074BA ; Export Names Table for X.exe .text2:008074BA ; .text2:008074BA off_8074BA dd rva word_80791E, rva a@Xp26shdocvw_t, rva a@Xp28shdocvw_t .text2:008074BA ; DATA XREF: .text2:00806E1Co .text2:008074BA dd rva a@Xp29shdocvw_t, rva a@Xp32shdocvw_t, rva a@Xp36shdocvw_t ; "@$xp$26Shdocvw_tlb@TCppWebBrowser" .text2:008074BA dd rva a@XpYnpqqrp14sy, rva a@XpYnpqqrp14_0, rva a@XpYnpqqrp14_1 .text2:008074BA dd rva a@XpYnpqqrp14_2, rva a@XpYnpqqrp14_3, rva a@XpYnpqqrp14_4 哈哈,IDA已经给分析过了,是输出表的Names Table,而且0080791E是该表的第一项,向上看名字对应的序号表如下: .text2:00807288 ; Export Orfinals Table for X.exe .text2:00807288 ; .text2:00807288 word_807288 dw 118h, 0Ah, 6, 4, 8, 2, 0Fh, 1Ah, 14h, 15h, 1Fh, 18h .text2:00807288 ; DATA XREF: .text2:00806E20o .text2:00807288 dw 20h, 1Eh, 16h, 13h, 1Ch, 17h, 1Dh, 10h, 19h, 1Bh, 0Dh 再向上看到输出表如下: .text2:00806DFC ; Export directory for X.exe .text2:00806DFC ; .text2:00806DFC dd 0 ; Characteristics .text2:00806E00 dd 0 ; TimeDateStamp .text2:00806E04 dw 0 ; MajorVersion .text2:00806E06 dw 0 ; MinorVersion .text2:00806E08 dd rva aXx_exe ; Name .text2:00806E0C dd 1 ; Base .text2:00806E10 dd 119h ; NumberOfFunctions .text2:00806E14 dd 119h ; NumberOfNames .text2:00806E18 dd rva off_806E24 ; AddressOfFunctions .text2:00806E1C dd rva off_8074BA ; AddressOfNames .text2:00806E20 dd rva word_807288 ; AddressOfNameOrdinals 就是一共有0x119个输出项,而造成溢出的输出项的序号是0x118,呵呵,是最后一个,这说明VMP给输出表增加了一项,其序号在最后,而其名字的序号在第一个,只要老版本的dbghelp.dll提取输出表的名字,立即就会溢出。 搞到这个时候,又去看了一下IDA目录下是否有dbghelp.dll,结果发现有,但修改日期是2009年7月13日,比海风大牛给的那个dll还要新一些。我的IDA的版本是5.5。 下来还有一个问题就是,为什么栈上只需要覆盖多于0x814几个字节就可以使返回地址无效,可为什么VMP要把那个名字的长度设定为0xC1C,查看了一下68D808BF所在的函数,函数头上没有SEH的代码,在OllyICE中直奔fs:[0],为0012B060,而 ebp-814+0C1C=0012B0B4,在栈上看一下,0xC1C个字节不但把当前SEH数据都覆盖掉了,还把下一个SEH链点的指针也覆盖掉了。不过这里还有的不太理解,其实只要覆盖第一个SEH数据,整个SEH链就已经不可用了,为什么还要把第二个SEH链点也覆盖掉。猜想也许是不同版本有漏洞的dbghelp.dll的栈空间不一样大吧,可能这个0xC1C是个满足所有可溢出覆盖掉SEH链头的dbghelp.dll的最小值吧。 最后得出结论:VMP利用了老版本dbghelp.dll在拷贝输出表名称时使用inline化的strcpy同时未限制源字符串的长度的漏洞,在加壳时给目标程序增加了一个输出项,该项在输出名字表中排在第一位,该名字长达0xC1C字节,对应的输出项为最后一个输出项。而当调试分析程序(如OD,IDA)调用dbghelp.dll分析加壳程序的输出表时,就会造成线程栈溢出,同时覆盖了当前SEH链表头,使得异常处理程序在无效的地址上,从而再次引发异常,进而形成异常循环,耗光了线程栈,引起程序终止,却没有任何提示。 |
|
|
[原创]挣扎的菜鸟 - 当OD不能装载也不能附加程序时
不好意思,发完了我看了一下,可能字体选择的有问题,数字显示的都很难看,大小不一的。 另外,代码里面的tab转化的也不对,那些汇编码也是很难看,本来都是对其的。 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值