|
[求助]为什么OD 无法加载程序?
一点小意见,仅针对你提供的程序,不是通用修改方案,当然通用的修改方案是改Ollydbg,不要让它总是大惊小怪。 现象: Bad or unknown format of 32-bit executable file 解决方案: 将文件偏移0x124处的0x041CF080改为0x00000010 Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00000120 80 F0 1C 04 -> 00000120 10 00 00 00 现象: Module 'TrashReg' has entry point outside the code(as specified in the PE header). ... 解决方案: 使用你的大脑去脱壳 |
|
ProcPort/ASPack 2.12 的分析和手工脱壳
续1-ProcPort/ASPack 2.12 的分析和手工脱壳 上一篇文章提到:“当在脱壳和分析代码的过程中,发现:如果文件改名,程序主界面无任何显示。脑袋中没有什么灵感,下一篇文章再解决吧。” 一般出现这种情况,是因为程序把自己的名字硬编码进数据区,但查遍了经过脱壳的procport.exe,一点踪迹都没有。试着沿着GetModuleFileNameA(W)这条线去找,程序中使用到的有两处: (1) CODE:00405A02 E8 F1 B8 FF FF call GetModuleFileNameA CODE:00405A07 8B C4 mov eax, esp 返回值被直接覆盖,不是此处 (2) CODE:00405C3C E8 B7 B6 FF FF call GetModuleFileNameA CODE:00405C41 C6 45 EE 00 mov [ebp+String2], 0 CODE:00405C45 8D 45 F8 lea eax, [ebp+hKey] 返回值被直接覆盖,不是此处 这样的话,我只好把希望放在procport.dll上。把procport.dll脱壳后,发现了这个地方。 .text:100026EC 6A 0D push 0Dh .text:100026EE 8D 81 C8 6E 0A 10 lea eax, aWArtReProcport30f_0[ecx] ; "" .text:100026F4 68 30 1B 01 10 push offset aProcport_exe ; "\\ProcPort.exe" .text:100026F9 50 push eax ; lpMultiByteStr .text:100026FA E8 D2 46 00 00 call sub_10006DD1 .text:100026FF 83 C4 04 add esp, 4 .text:10002702 50 push eax .text:10002703 E8 C8 45 00 00 call sub_10006CD0 .text:10002708 83 C4 0C add esp, 0Ch .text:1000270B 85 C0 test eax, eax .text:1000270D 75 07 jnz short loc_10002716 .text:1000270F C6 05 D1 6F 0A 10 01 mov byte_100A6FD1, 1 很明显,函数sub_10006CD0的作用就是判断两个文件名是否相等,如果相等,将布尔变量 byte_100A6FD填为1,否则仍旧为零。 将.text:1000270D处的机器码75 07改为90 90,大功告成。 Enjoy it. By TNTTOOLS |
|
[讨论]今晚学到的一点东西
一点小意见Enjoy it. (1) “符号扩展:是指一个数从位数较少扩展到位数较多,如从8位扩展到16位, 或从16位扩展到32位。” 修正:上面的定义是扩展的定义,扩展extension分为无符号扩展和符号扩展 sign extension。 无符号扩展针对无符号数,符号扩展针对有符号数。 有很多指令都是分无符号数和有符号数的。 如movzx是对无符号数,movsx是对有符号数 (2) “注意:虽然整数常量的后缀使用大写或者小写英文字母都没关系,但是它 们格式限定符必须使用小写!” 修正: 在C中是用前缀来表示不同进制的常量数(0x),在MASM中是用后缀来表示不同 进制的常量数(b,h),都是小写形式。 在printf中格式限定符大小写都可以用,但关系到其输出是大写还是小写, 因为十六进制中有A-F。 (3) 关于全面的资料: Windows编程 - MSDN光盘 IA32- IA-32 Intel® Architecture Software Developer’s Manual |
|
WinUnpack 0.39 Final的分析和手动脱壳
WinUpack v3.9 Final的主程序也是用的这样的压缩方法。今天花了一点时间又将其主程序搞定。贴图留个纪念。向作者Dwing表示敬意。注意图中的主窗口的标题被我改了。 “tnttools到此一游”,纯粹搞笑。 |
|
|
|
|
|
请各位高人帮小第看看这个指令是什么意思
看代码,如果最高位为零,什么动作都没有;如果最高位为壹,就是+1。 一些特殊值: 2 2 1 1 0 0 -1 0 -2 -1 ... 应该看一下后面的代码,没有上下文,很难说。 |
|
[原创]实数12.34 在IA32上你的样子 附IA-32浮点数的范围
事实:不是所有的有限十进位小数都能换成有限的二进位小数,我文中的例子就是一例。 在这种情况下就要进行舍入操作round。 IEEE 754按照舍入的方向规定了四种舍入操作: round toward nearest round toward zero round toward plus infinity round toward minus infinity |
|
|
|
CRC-32的算法小议
这篇文章被看雪老大列为精华,我也觉得意外。 因为这只是我学习算法过程中的一个小小的思考过程,文章太短了, 但我觉得如果你真正想看懂网上CRC32代码的实现,这篇文章绝对有帮助。 当时在看CRC32代码实现时,不想作个copypaster,反复思考: I.为什么要用表来实现 解决方法: 你既可以静态填表,也可以动态生成那个表。 II.为什么要这样写代码,以字节为单位,为什么要移8位 所有思考的结果就汇成了这样一篇小文章,cnbragon前辈说它不是原创,也对:我生来就什么都不知道,都是后天学习的结果,全部都是COPY|paste到脑袋中的。 这篇文章被看雪老大列为精华,我再次表示意外。 |
|
CRC-32的算法小议
回应cnbragon - 请大家先弄清楚这些: 字节内的顺序,字节之间的顺序,字word之间的顺序 标题中的字word, 指在CPU环境下表示CPU处理和存储的单元。 (1)不是!!!比特位!!! 字节内的顺序,如cnbragon所说: the least significant bit the most significant bit the left-most bit position the right-most bit position 请cnbragon注意,little endian所描述的数据存储方式的单位不是比特位,而至少是字节或是字节的倍数,不要和CPU的移位指令弄混。 (2) 我所说的最重要,最不重要指的是英文原文 the most significant and the least significant 后面特意没有加byte, word等名词,是因为在不同的语境下, 这些都有可能。 BYTE UNICODE 按Little Endian存储如果是0xAA, 0xBB, 那么Big Endian存储就是0xBB, 0xAA WORD 这里的WORD,指16比特位 按little endian存储如果是0xAA, 0xBB, 0xCC, 0xDD 那么按Big Endian存储就是0xCC, 0xDD, 0xAA, 0xBB (3) 关于最前面和最后面 一个队列,你说最前面和最后面,没有什么不妥, 说最左边和最右边也没有什么错。 |
|
[求助]用IceExt时出错
http://bbs.pediy.com/showthread.php?s=&threadid=27311 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值