|
[求助]关于跳转是否实现的问题
虽然intel硬件对这个功能有支持,不过OD好像还没有这个功能。 不光是OD,其它调试器也没发现说有这一功能的。 intel的这一功能好像是叫最后一次分支记录,是P6系列以后的CPU所支持的。 |
|
[求助]如何将.dat文件分离出来
照这么说那个.dat文件是一个pe文件了,那么你试着直接运行它,看看它有什么反应,或者错误提示。 这样也能猜测得到一些信息。 你也可以直接用调试器加载那个.dat文件,看看它有什么玄机。 |
|
[求助]请高手教我怎样在c++下反跟踪
完全的反跟踪几乎是不可能的,再厉害的反跟踪手段都可以被 反-反跟踪。只能是尽量增加跟踪的难度。 说一些通常的原理: 1.用运行时多态来替代条件判断语句; 2.代码扰乱,比如在发布时将所有函数名和变量名改为无意义的名字; 3.垃圾代码填充,比如在正常功能代码中间加入无意义的代码; 4.代码扭曲变形,特别是对常量的处理上,比如常量赋值语句,尽量用复杂难懂的等效语句来替代。 5.并行或异步逻辑,通过多线程,或定时器,将取得输入信息,对信息处理,以及输出信息的步骤延迟处理。 6.程序打散,将算法关键代码分散到程序的不同的地方,而不是集中在一个函数里。 7.定义无用的数据结构,比如一个结构中要用到4个域,你可以定义一个包含10个域的结构,并且有用的域和填充域混迭一起,不要只在结构的尾部填充。 8.对于填充的数据域,还要进行操作和访问,让跟踪人员无法准确推断出数据结构。 9.使用异常处理机制,来使程序执行流程难以跟踪。但注意引起异常的代码一定不要让人看出是故意引起的。 我能想到的先就这么多了。你还需要自己多多总结。 |
|
|
|
[求助]如何将.dat文件分离出来
问题不描述清楚,别人是无法给你帮助的。 1.你说的dat文件是程序运行时释放的还是原来就存在的? 2.你说的注册后就调用dat文件,这个调用是怎么理解,是说dat文件实际是PE文件,而调用它里面的函数吗? 3.你说的分离出来是什么意思,是说用它直接运行吗? 我以前弄过个游戏,叫luxor大概,如果我没理解错你的话,你的情况跟这个游戏应该一样。 我说下我分析这个程序的思路过程: 主程序luxor.exe启动后先判断是否注册,没有则弹出注册窗口和广告。点一下“试玩”,它会释放出一个文件,文件名记不清了,反正是个可执行文件,不过加密过了。 然后主程序用CREATE_SUSPENDED标志去调用CreateProcess,然后利用返回的句柄操作子进程的内存,将一块代码读出进行解密,之后再写回去,然后再ResumeThread让游戏恢复运行。 只需要在ResumeThread处下断点,然后直接将子进程DUMP出来,此时已经解码完成了。 我这个游戏这时已经能玩了,而且再也不用注册了。 如果别的程序此时不能玩,则需要修复一下输入表了,具体操作就不讲了。 |
|
[求助]大哥们帮帮忙,关于PWCheck2.0Pro
extract命令正常情况下是WindowsXP自带的。如果你用的是某种所谓“优化”版,“精简”版的系统,可能是把这个不常用命令去掉了。 没关系,就使用winrar就可以打开的,一般来说,像.dl_或.ex_这类文件,实际上是微软cab格式的压缩包。 你把文件改名,.zip或.cab都行,然后用Winrar就能打开了。 如果Winrar说格式未知,那对不起,可能是我判断错了,它们不是cab格式的压缩包。 |
|
[求助]这个CM看不懂, 是不是下鼠标断点啊?怎么下?
寻找关键代码下断点的方法已经写出来了。 算法分析略去了,留给大家练习,这个很简单的。 http://bbs1.pediy.com/showthread.php?t=75638 |
|
[求助]C语言如何实现两个大整数相加?
用字符串模拟手算十进制整数,是一种容易理解的方法,编码也相对清晰易懂。 但是从效率的角度,通常不采用这种方法。 前几天研究RSA时,学习了下afanty的实现方法,是个比较高效的方法。 http://www.pediy.com/bbshtml/bbs5/pediy50664.htm 对于用字符串表示的十进制数加法,如果用汇编语言写算法会更高些。 INTEL指令系统中有ASC码加法的相关指令,可以很方便实现十进制的加法的。 |
|
[求助]大哥们帮帮忙,关于PWCheck2.0Pro
注意,.dl_或.ex_的文件不是简单改名就可以的。 它们是经过压缩的。 使用Winows的Extract命令可以解压。当然使用Winrar也可以 在命令窗口输入extract会有详细的参数说明。 |
|
[已解决]汇编作业,求思路
不好意思,语气有点问题。向你道歉。 主要是我一看标题,就以为是问作业呢。 既然已经明白了,我也不多说了。 代码自搬移和重定位在底层的汇编语言中经常用到的,所以看到要移动代码,马上就应该想到让数据段与代码段重合。 在MBR,或其它特别在意代码密度的地方,常用push cs; pop ds这样的指令对来 这两条指令都是单字节指令,而使用AX寄存器的两条指令都是双字节。对于只有512字节的MBR来说,能少一个字节是一个字节。 有兴趣可以看一下FreeBSD的boot0.s,此MBR代码可谓最精彩的程序之一了。 感谢天才程序员Robert Nordier给我们带来如此精彩的代码。 |
|
|
|
[求助]关于双精度浮点操作的问题,向各位请教
为什么不修改跳转指令,而修改数据操作指令呢??? 一般的爆破点不对数据操作下手的,当然特殊的除外。 再回到问题。 因为fstp是从浮点寄存器中向内存中写数,我理解你应该是说希望 fstp tbyte ptr [ebp-134] 这条指令执行之后,内存ebp-134处的值应该为一个双精度的 100.00. 因为一般ebp-134是位于栈上的,通常是一个函数的局部变量,而不是.text或.data节的变量,那么无法直接修改程序.exe文件的数据区。 只能对代码进行修改。 如果你只是需要每执行到这里,那个变量的值都是100.0,可以这样修改。 首先,对 fld qword ptr [esi+38] fstp tbyte ptr [ebp-134] 这两行都加个标签,按键盘上的“冒号(:)”键即可。加标签是为了方便写汇编。 比如加的标签为 patch_point 和 back_point,即 patch_point fld qword ptr [esi+38] back_point fstp tbyte ptr [ebp-134] 在反汇编窗口往下拉,找到一大片“0”区域,反汇编代码是一大片的 ADD BYTE PTR DS:[EAX], AL 我们就在这里打补丁。 在随便一行,加个标签,用做常数变量,如patch_data,不过要注意对齐,因为是64位双精度浮点数,至少应该在四字节地址边界处。 然后保留足够的空间后,再加个标签,如patch_code,然后从这行开始汇编: patch_code fld qword ptr [patch_data] ;将需要的值载入浮点栈 ;fld qword ptr [esi+38] ;本来打补丁在跳转回去之前,要恢复被jmp指令所改写的原指令。但是这里我们正是要改写它,所以这句就不恢复了 jmp patch_back ;回到补丁恢复点继续 然后在数据窗口CTRL+G,输入patch_data,将此值改为需要的值,如100.0 再在反汇编窗口CTRL+G,输入 patch_point,回到刚才我们打补丁的地方,开始汇编 jmp patch_code 现在保存所有修改到可执行文件,换个文件名保存一下,再试试。 如果正确的话,当执行到patch_point,即原来的fld qword ptr [esi+38]指令时,会执行jmp指令,跳到我们的patch_code处,而这里我们自己汇编的代码,执行特定的功能,然后再jmp back_point,返回原来程序继续执行。 以上过程是一个比较典型的代码patch的过程,我常用此方法修改程序。使用OD的标签插件,我们可以避免一些地址计算的错误。 需要注意的是,patch_point应该位于patch_back上面的至少5个字节的位置,否则jmp指令可能会覆盖过多的指令。 我上面说patch_point用fld qword ptr [esi+38]这条指令了,但实际上,这条指令长度不够,所以应该在往更前面的指令设定为patch_point,比如mov byte ptr [ebp-E8], 3 这样,在patch_code跳回去之前,就必须把破坏的指令用相同的指令补上了。 这个留给你自己实验。 |
|
[求助]请教达人关于流水线优化的问题
目前没办法。 因为流水线的东西,不属于体系结构的范畴,而是具体硬件实现的范畴。 程序员是面向体系结构(寄存器定义,指令集定义和寻址方式定义)的,无法解决流水,并发,多发射,乱序的问题。 |
|
|
|
[求助]关于双精度浮点操作的问题,向各位请教
没明白你的意思,用汇编写什么功能呢? 如果是操作浮点数,需要浮点指令。 http://www.pediy.com/tutorial/chap2/Chap2-4.htm 把你需要完成的功能再描述详细一些。 |
|
|
|
[求助]关于双精度浮点操作的问题,向各位请教
浮点数的格式比较复杂。 直接按16进制显示,人是不好看出它的值的 首先,明白程序使用的浮点数所用的位数,比如fld qwordptr [esi+38]这条指令,知道加载的是一个64位浮点数。 到OD的内存窗口定位到 esi+38的地址,然后 右键->浮点->64位双精度, 再看内存窗口,是不是显示成了浮点数了??? 在其上 右键->修改,即可修改它的值了。 祝你好运。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值