PE文件头的校验和在汇编里的算法到底咋写呢?

shier2817 2014-12-18 10:22:26
PE结构网上到处都是,关于其中的扩展头(也叫可选头),其中有个成员CheckSum(相对于本结构的 40h偏移处,是结构的第22个成员),按描述说是PE的校验和,一般不使用,对于所有驱动、系统启动时加载的DLL、系统关键进程加载的DLL都要进行校验和的校验;
这个校验和可以通过API计算:CheckSumMappedFile 或者直接 MapFileAndCheckSum;
但是不少资料和书籍也说了其算法比较简单,自己手动写代码计算也可以,描述的计算原理一般是这样:
1、因为要计算整个文件数据嘛,所以开始这个字段的数据要先置0;
2、从文件头开始,每次读一个字(WORD),进行带进位的累加(ADC),超出WORD部分自动溢出;
3、将前面的累加和再加上PE文件的长度,结果就是这个校验和了。
(以上资料基本摘自戚利《Windows PE 权威指南》,在网上其他资料与其描述也基本相同);
比如这个连接的算法,在网上就随处可见,大部分都是这么算的:
http://sec.chinabyte.com/497/8918497.shtml
我简单写一下刚开始我按照上述资料写的代码:

;首先假设我已经把PE文件映射的起始地址放入ebx了!
mov ecx, _dwSize ;PE文件大小
shr ecx, 01h ;因为每次读2字节,所以循环次数是长度的一半。部分资料为了处理奇数在这里要+1再右移或其他方法,但本帖我就找偶数长度PE测试也是不对的,所以这里就不写那些兼容处理部分了;
xor edx, edx
xor eax, eax
clc
@@:
mov ax, word ptr [ebx]
adc dx, ax
add ebx, 02h
loop @B
mov eax, edx
add eax, _dwSize ;这样就算是计算完毕了。


但是我测试,这个算法根本不对(跟API计算的结果对比的话),差距很大的哦;
后来在CSDN里找到这个:
http://bbs.csdn.net/topics/20067469#post-12158577
我按照这位前辈的写法修改了上面:

;首先假设我已经把PE文件映射的起始地址放入ebx了!
mov ecx, _dwSize
shr ecx, 01h
xor edx, edx
clc
@@:
;------------------------------------
movzx eax, word ptr [ebx]
add ebx, eax
mov eax, edx
and edx, 0ffffh
shr eax, 10h
add edx, eax
;------------------------------------
add ebx, 02h
loop @B
mov eax, edx
add eax, _dwSize

我测试这样算出来的跟API比才是对的,但是我发帖子就想问问,这到底是个啥原理啊?
好多的教程、书籍都是些挺有名的前辈高人所写,不可能他们说错吧(这里的错1是:带进位加法,而第二段代码根本没有adc;2是word超出部分自动溢出,但第二段代码没有让其溢出,这里我有点看太懂,好像是把高16位和低16位相加了吧?)
谁能给解释解释?莫非这个算法微软后来又更新了?还有第二段代码的原理是什么,我标记出来有改动的部分,那些虽然指令简单,但逻辑上我不太理解。。。
多谢您指教了!
...全文
631 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2014-12-19
  • 打赏
  • 举报
回复
引用 4 楼 DelphiGuy 的回复:
非也,按你的指令顺序,后面的add ebx, 02h把上一次adc dx, ax可能产生的进位清掉了,下一次也加不上。 另外,我测试了一下,按我的改法算出来的checksun和第二种方法算出来的是一致的。
真实一语惊醒梦中人啊。。。。我说为什么不成功呢?就是因为下面那个 add ebx, 02h 搞的,迷糊了,adc 这种东西完全需要考虑前后的其他指令能不能改变了CF我擦。。。。 我最终改成这样了,比较方便(其实人家戚利的书上也是利用esi的,只不过我一般习惯能不用字符串的寄存器就不用,没想到竟然会有这种差异。。。)

shr ecx, 01h            ;esi中已经存放PE映射的首地址了,ecx为PE长度的一半,先不考虑奇数,最后处理。。。
xor edx, edx
clc
@@:
lodsw
adc dx, ax
loop @B
pop ecx
push ecx
and ecx, 01h			;处理奇数
jecxz @F
lodsb
adc dl, al
结果完全正确,结贴给分啦。。。
  • 打赏
  • 举报
回复
非也,按你的指令顺序,后面的add ebx, 02h把上一次adc dx, ax可能产生的进位清掉了,下一次也加不上。 另外,我测试了一下,按我的改法算出来的checksun和第二种方法算出来的是一致的。
zara 2014-12-18
  • 打赏
  • 举报
回复
这个计算方面满怪异的,核心部分是 word,后来因文件大小的关系才升级到了 dword。
看第二段代码,加法运算进行了两次吧,第一次就是进行累加,第二次应该是将累加结果的 HiWord (shr eax, 10h) 和 LoWord (and edx, 0ffffh) 相加,结果在 edx 里。带进位加的问题,应该是第二次的加运算吧,由于是两个 word 相加到个 dword 里,所以进位是自然而无须 adc 的。自动的溢出,应该是第一次的加运算,简单的 add 了,没有做任何其它的处理。
「已注销」 2014-12-18
  • 打赏
  • 举报
回复
引用 2 楼 DelphiGuy 的回复:
第二个代码: 9 add ebx, eax 这应该是add edx,eax吧。 你的代码: adc dx, ax 应该是 add dx, ax adc dx,0 这样才合理。
感谢,您说对了,我第二段代码是看着我的源码自己手动打出来的,确实打错了,应该是 add edx,eax; 我实际调试的源码里也是正确的,所以我测试的结果正确; 而您回复的第二个观点,我测试了下,还是不行,结果是错误的,其实我个人感觉: adc dx, ax 和 add dx, ax adc dx,0 这两种写法唯一的差别只在循环的最后一次吧,因为前面的就算没你这个 adc dx,0 ,也会在下一次 adc dx, ax 将CF中的那个1给加进来,而原先我测试的就是错误的结果与正确的相差可不是1、2这么点的值,而是相差大约1倍左右。。。
  • 打赏
  • 举报
回复
第二个代码: 9 add ebx, eax 这应该是add edx,eax吧。 你的代码: adc dx, ax 应该是 add dx, ax adc dx,0 这样才合理。
由于限制,分开了 2 个文件,请大家一起下载在解压,请谅解 《完全掌握加密解密实战超级手册》紧紧围绕软件的加密与解密来进行讲解,在详细讲述加密/解密技术的同时,还介绍了相应的实现原理,并配合案例分析,使读者能够系统、深入地了解加密/解密技术,能够更深层次地理解他人的编程思路,从而更好地提高自己的编程水平。全书共分为14章,包括:加密解密技术基础、常用代码分析工具、不同的加密解密算法、静态分析解密工具、动态调试解密工具、辅助工具、壳的不同应用技术、为程序打上补丁、网络验证技术、常用加密工具、不同的注册保护方式、编辑安装包程序、不同软件的保护措施、常用软件加密解密技术等。 《完全掌握加密解密实战超级手册》讲解通俗,深入浅出,注重实践,适用于广大计算机软件加密解密技术新手、爱好者,适用于软件开发从业人员和编程爱好者,也非常适合大专院校相关专业学生,以及有志于从事安全或加解密行业的准专业人员快速掌握实用技术 前言 第1章 初识加密解密技术 1 1.1 加密解密技术基础 2 1.1.1 密码学简述 2 1.1.2 常用汇编语言命令 2 1.1.3 破解密码的常用方式 4 1.1.4 壳的作用和分类 5 1.2 文件与动态链接库文件 6 1.2.1 INI文件与自定义文件的读 6 1.2.2 在Delphi中建立和使用DLL文件 10 1.2.3 DLL文件的调用方法 12 1.3 设计与发布包组件 14 1.3.1 包组件概述 14 1.3.2 设计与发布包组件 15 1.3.3 安装与卸载包组件 17 1.4 解密与注册保护 19 1.4.1 解密方式 19 1.4.2 注册保护方式 19 1.5 试用期限制功能 21 1.5.1 试用次数限制功能 21 1.5.2 试用天数限制功能 25 1.5.3 试用日期限制功能 31 1.5.4 执行时间限制功能 36 1.5.5 NAG窗口提示限制 37 1.6 专家点拨:常见问题解答 42 第2章 常用代码分析工具 43 2.1 初识PE格式文件 44 2.1.1 PE格式文件概述 44 2.1.2 检验PE格式文件 46 2.1.3 PE文件格式的结构 46 2.1.4 设置Optional Header可执行信息 49 2.1.5 Section Table结构数组 51 2.1.6 Import Table输入表 52 2.1.7 Export Table输出表 53 2.1.8 重定位表 54 2.2 简述代码分析实战 55 2.2.1 虚拟地址与偏移地址 55 2.2.2 搜索程序入口点OEP 58 2.2.3 转储程序与修复输入表 58 2.2.4 用增加重定位项调用引入表函数 62 2.3 常见静态分析工具 63 2.3.1 常见程序类型分析工具 63 2.3.2 常见资源编辑器工具 64 2.3.3 常见反汇编分析工具 66 2.4 常见动态分析工具 67 2.5 常见注册表分析工具 68 2.5.1 注册表编辑器Regedit 68 2.5.2 注册表监控工具Regsnap 71 2.5.3 注册表数据库监视软件Regmon 73 2.5.4 注册表静态比较工具RegShot 74 2.6 专家点拨:常见问题解答 75 第3章 不同的加密解密算法 76 3.1 数据加密的缘由 77 3.1.1 数据加密技术概述 77 3.1.2 为什么要进行数据加密 77 3.1.3 数据加密的原理 77 3.1.4 加密技术与密码分析 79 3.2 Hash算法基础 81 3.2.1 CRC32算法 81 3.2.2 MD5算法 82 3.2.3 SHA算法 85 3.3 对称密码算法基础 87 3.3.1 对称密码算法概述 88 3.3.2 BlowFish算法概述 88 3.3.3 DES算法概述 90 3.3.4 IDEA算法概述 94 3.4 非对称密码算法基础 95 3.4.1 非对称密钥密码概述 95 3.4.2 RSA非对称密钥密码概述 95 3.4.3 DSA数据签名技术 96 3.4.4 Diffie-Hellman密钥交换系统概述 97 3.5 专家点拨:常见问题解答 97 第4章 静态分析解密工具 98 4.1 程序源代码概述 99 4.1.1 基本程序信息 99 4.1.2 反汇编源代码部分 101 4.2 常用反汇编工具 103 4.2.1 反汇编和调试工具W32Dasm 103 4.2.2 国产静态反编译工具C32asm 114 4.2.3 反汇编工具IDA Pro 116 4.3 实战静态分析解密 127 4.3.1 如何实现静态分析解密 127 4.3.2 汇编指令及其机器码值 128 4.3.3 判断真假注册码的方法 128 4.3.4 实例分析:静态破解Crackme3软件 129 4.4 注册机编器keymake 131 4.4.1 为破解文件打个补丁 132 4.4.2 制作内存补丁 132 4.5 专家点拨:常见问题解答 133 第5章 动态调试解密工具 135 5.1 动态调试工具Ollydbg 136 5.1.1 初识Ollydbg 136 5.1.2 不同的配置选项 138 5.1.3 快速掌握常用功能 138 5.1.4 熟悉必要的插件 141 5.1.5 实现动态调试解密 141 5.1.6 实例1:解密加过UPX壳的Crackme程序 142 5.1.7 实例2:找出真的注册码 143 5.2 内核模式调试器SoftICE 144 5.2.1 配置SoftICE工具 144 5.2.2 实现SoftICE调用 148 5.2.3 激活SoftICE主窗口 148 5.2.4 快捷键与常用命令 150 5.2.5 快速找到程序入口处 157 5.2.6 多次跟踪的设置 158 5.2.7 用PE修改代码属性 158 5.3 动态反汇编调试器TRW2000 159 5.3.1 安装与配置TRW2000 160 5.3.2 呼出TRW2000调试窗口 162 5.3.3 常用命令和功能键 164 5.4 专家点拨:常见问题解答 169 第6章 各显其能的辅助工具 171 6.1 不同的编辑修改工具 172 6.1.1 十六进制编辑工具WinHex 172 6.1.2 十六进制查看器Hiew 175 6.1.3 十六进制编辑器HexWorkshop 179 6.1.4 文本编辑器UltraEdit 182 6.2 不同功效的监视工具 187 6.2.1 文件系统监视工具Filemon 187 6.2.2 API函数监视工具 188 6.2.3 MFC(微软库类)监视工具Mfcspy 190 6.3 编辑程序内部资源工具 191 6.3.1 用FreeRes工具修复资源 191 6.3.2 用工具eXeScope编辑程序内资源 192 6.3.3 用工具Festools管理系统资源 194 6.4 制作破解补丁工具 196 6.4.1 补丁制作工具dUP 196 6.4.2 绿色工具XCell 199 6.5 专家点拨:常见问题解答 200 第7章 揭秘壳的不同应用技术 201 7.1 不同的加壳压缩软件 202 7.1.1 DOS窗口下的文件压缩壳软件UPX 202 7.1.2 压缩各种可执行程序的ASPack 203 7.1.3 软件保护压缩工具Armadillo 204 7.1.4 国产外壳保护工具EncryptPE 207 7.2 查壳工具大放送 208 7.2.1 用Language2000查看加壳情况 208 7.2.2 功能强大的PEiDentifier 209 7.3 各具神通的脱壳工具 210 7.3.1 常用ASPack脱壳软件简介 210 7.3.2 通用脱壳工具UnPECompact 211 7.3.3 通用脱壳工具ProcDump 212 7.3.4 脱壳工具大集合UN-PACK 214 7.4 轻松实现手动脱壳 215 7.4.1 用ImportREC实现手动脱壳 216 7.4.2 重建可编辑资源 220 7.5 专家点拨:常见问题解答 220 第8章 别出心裁:为程序打上补丁 222 8.1 常用补丁制作工具 223 8.1.1 专业补丁制作工具CodeFusion 223 8.1.2 内存动态补丁工具Process Patcher 226 8.2 实例:网络客户端程序补丁 228 8.2.1 程序拦截的验证代码 228 8.2.2 增加自动修改机器号功能 229 8.2.3 用补丁修改程序 232 8.2.4 为程序附带一个动态链接库 234 8.2.5 用补丁加密可执行文件 235 8.3 代码自修改SMC技术 238 8.3.1 SMC函数定义 238 8.3.2 实例:SMC补丁技术应用 239 8.4 用CrackCode2000制作注册机 241 8.4.1 快速找到注册码 241 8.4.2 实现内存直接寻址 242 8.4.3 实现寄存器间接寻址 243 8.4.4 为Decompile Winhelp制作注册机 243 8.4.5 实例:CrackCode的加强模式 245 8.5 专家点拨:常见问题解答 247 第9章 网络验证技术大放送 248 9.1 实现Web服务器网络验证 249 9.1.1 加密客户端 249 9.1.2 控制本地计算机 252 9.2 实现本地服务器验证 256 9.2.1 加密客户端 257 9.2.2 加密服务器端 259 9.3 在线升级验证加密技术 261 9.3.1 在线升级验证实现 261 9.3.2 实例分析:在线升级验证 262 9.4 专家点拨:常见问题解答 268 第10章 各种常用加密软件工具的使用 269 10.1 多媒体文件加密工具 270 10.1.1 多媒体加密工具Private Pix 270 10.1.2 图片软件加密工具CryptaPix 272 10.1.3 图片文件专业加密工具WinXFiles 273 10.2 多功能文件加密工具 276 10.2.1 数据加密和安全通讯工具“文件密使” 276 10.2.2 可加密各种格式文件的BlackBox 281 10.2.3 对称加密算法工具ABI-CODER 286 10.2.4 国产加密工具“加密精灵” 288 10.3 专家点拨:常见问题解答 291 第11章 分析软件的不同注册方式 292 11.1 简单的注册码保护方式 293 11.1.1 追踪简单算法 293 11.1.2 简单注册码的破解 294 11.1.3 API函数常用断点及实例 298 11.2 按钮功能限制 308 11.2.1 按钮功能限制概述 308 11.2.2 突破按钮限制 309 11.2.3 按钮限制解密实例 311 11.3 NAG窗口 312 11.3.1 NAG窗口实例1 313 11.3.2 NAG窗口实例2 317 11.4 加密狗解密 319 11.4.1 判断加密狗类型 319 11.4.2 加密狗解密实例 320 11.5 专家点拨:常见问题解答 325 第12章 编辑安装包程序 326 12.1 InstallShield 327 12.1.1 InstallShield使用介绍 327 12.1.2 编辑CAB压缩包 341 12.2 Wise安装包软件 343 12.3 Setup Factory安装包制作工具 343 12.4 Inno Setup安装制作软件 352 12.4.1 Inno Setup的使用介绍 352 12.4.2 Inno Setup的脚本语法介绍 357 12.4.3 压缩包的编辑 360 12.5 微软MSI安装包 360 12.6 专家点拨:常见问题解答 362 第13章 不同软件的保护措施 363 13.1 对抗不同的破解手段 364 13.1.1 对抗DeDe和动态调试 364 13.1.2 对抗SoftICE 365 13.1.3 对抗静态调试 367 13.1.4 实现磁盘文件自校验 368 13.2 不同软件的保护实现 369 13.2.1 把ASP编成DLL 370 13.2.2 COM组件的Delphi实现 372 13.2.3 实现软件注册保护的VCL组件 377 13.2.4 利用伪装壳制造虚假信息 379 13.2.5 利用加密锁保护程序 380 13.3 邮件加密软件PGP 384 13.3.1 PGP概述 384 13.3.2 PGP的安全问题 385 13.4 专家点拨:常见问题解答 390 第14章 常用软件加密解密技术 391 14.1 加密解密Word文件 392 14.1.1 Word自身功能加密 392 14.1.2 利用AOPR解密Word文档 393 14.1.3 风语文件加密工具 395 14.1.4 Word Password Recovery破解工具 395 14.1.5 Word密码查看器 396 14.2 Excel文件加密解密 397 14.2.1 实现Excel自加密 397 14.2.2 办公文件密码恢复程序 398 14.2.3 Excel加密文档解密工具Excel Key 399 14.3 PDF文件的加密解密 400 14.3.1 加密PDF文件 400 14.3.2 使用PDF文件加密器 402 14.3.3 Advanced PDF Password Recovery 404 14.3.4 用PDF Password Remover解除PDF文件口令 406 14.4 宏加密解密技术 408 14.4.1 实现宏技术加密 408 14.4.2 宏解密工具VBA Key 411 14.5 对压缩文件实施加密解密 411 14.5.1 实现WinZip自加密 412 14.5.2 解除ZIP文件口令 413 14.5.3 实现WinRAR自加密 413 14.5.4 解除RAR文件密码 414 14.6 加密解密EXE文件 415 14.6.1 用ASPack加密EXE文件 415 14.6.2 用tElock加密EXE文件 417 14.6.3 为EXE文件加口令 419 14.7 解密MS SQL Server保护 420 14.7.1 实现本地用户的帐户登录 420 14.7.2 查询分析器的使用 420 14.7.3 多功能密码破解软件 421 14.8 加密解密网页与脚本文件 423 14.8.1 网页与脚本的加密 423 14.8.2 网页与脚本的解密 428 14.9 专家点拨:常见问题解答 430
第二个压缩包 加密解密 前言 第1章 初识加密解密技术 1 1.1 加密解密技术基础 2 1.1.1 密码学简述 2 1.1.2 常用汇编语言命令 2 1.1.3 破解密码的常用方式 4 1.1.4 壳的作用和分类 5 1.2 文件与动态链接库文件 6 1.2.1 INI文件与自定义文件的读 6 1.2.2 在Delphi中建立和使用DLL文件 10 1.2.3 DLL文件的调用方法 12 1.3 设计与发布包组件 14 1.3.1 包组件概述 14 1.3.2 设计与发布包组件 15 1.3.3 安装与卸载包组件 17 1.4 解密与注册保护 19 1.4.1 解密方式 19 1.4.2 注册保护方式 19 1.5 试用期限制功能 21 1.5.1 试用次数限制功能 21 1.5.2 试用天数限制功能 25 1.5.3 试用日期限制功能 31 1.5.4 执行时间限制功能 36 1.5.5 NAG窗口提示限制 37 1.6 专家点拨:常见问题解答 42 第2章 常用代码分析工具 43 2.1 初识PE格式文件 44 2.1.1 PE格式文件概述 44 2.1.2 检验PE格式文件 46 2.1.3 PE文件格式的结构 46 2.1.4 设置Optional Header可执行信息 49 2.1.5 Section Table结构数组 51 2.1.6 Import Table输入表 52 2.1.7 Export Table输出表 53 2.1.8 重定位表 54 2.2 简述代码分析实战 55 2.2.1 虚拟地址与偏移地址 55 2.2.2 搜索程序入口点OEP 58 2.2.3 转储程序与修复输入表 58 2.2.4 用增加重定位项调用引入表函数 62 2.3 常见静态分析工具 63 2.3.1 常见程序类型分析工具 63 2.3.2 常见资源编辑器工具 64 2.3.3 常见反汇编分析工具 66 2.4 常见动态分析工具 67 2.5 常见注册表分析工具 68 2.5.1 注册表编辑器Regedit 68 2.5.2 注册表监控工具Regsnap 71 2.5.3 注册表数据库监视软件Regmon 73 2.5.4 注册表静态比较工具RegShot 74 2.6 专家点拨:常见问题解答 75 第3章 不同的加密解密算法 76 3.1 数据加密的缘由 77 3.1.1 数据加密技术概述 77 3.1.2 为什么要进行数据加密 77 3.1.3 数据加密的原理 77 3.1.4 加密技术与密码分析 79 3.2 Hash算法基础 81 3.2.1 CRC32算法 81 3.2.2 MD5算法 82 3.2.3 SHA算法 85 3.3 对称密码算法基础 87 3.3.1 对称密码算法概述 88 3.3.2 BlowFish算法概述 88 3.3.3 DES算法概述 90 3.3.4 IDEA算法概述 94 3.4 非对称密码算法基础 95 3.4.1 非对称密钥密码概述 95 3.4.2 RSA非对称密钥密码概述 95 3.4.3 DSA数据签名技术 96 3.4.4 Diffie-Hellman密钥交换系统概述 97 3.5 专家点拨:常见问题解答 97 第4章 静态分析解密工具 98 4.1 程序源代码概述 99 4.1.1 基本程序信息 99 4.1.2 反汇编源代码部分 101 4.2 常用反汇编工具 103 4.2.1 反汇编和调试工具W32Dasm 103 4.2.2 国产静态反编译工具C32asm 114 4.2.3 反汇编工具IDA Pro 116 4.3 实战静态分析解密 127 4.3.1 如何实现静态分析解密 127 4.3.2 汇编指令及其机器码值 128 4.3.3 判断真假注册码的方法 128 4.3.4 实例分析:静态破解Crackme3软件 129 4.4 注册机编器keymake 131 4.4.1 为破解文件打个补丁 132 4.4.2 制作内存补丁 132 4.5 专家点拨:常见问题解答 133 第5章 动态调试解密工具 135 5.1 动态调试工具Ollydbg 136 5.1.1 初识Ollydbg 136 5.1.2 不同的配置选项 138 5.1.3 快速掌握常用功能 138 5.1.4 熟悉必要的插件 141 5.1.5 实现动态调试解密 141 5.1.6 实例1:解密加过UPX壳的Crackme程序 142 5.1.7 实例2:找出真的注册码 143 5.2 内核模式调试器SoftICE 144 5.2.1 配置SoftICE工具 144 5.2.2 实现SoftICE调用 148 5.2.3 激活SoftICE主窗口 148 5.2.4 快捷键与常用命令 150 5.2.5 快速找到程序入口处 157 5.2.6 多次跟踪的设置 158 5.2.7 用PE修改代码属性 158 5.3 动态反汇编调试器TRW2000 159 5.3.1 安装与配置TRW2000 160 5.3.2 呼出TRW2000调试窗口 162 5.3.3 常用命令和功能键 164 5.4 专家点拨:常见问题解答 169 第6章 各显其能的辅助工具 171 6.1 不同的编辑修改工具 172 6.1.1 十六进制编辑工具WinHex 172 6.1.2 十六进制查看器Hiew 175 6.1.3 十六进制编辑器HexWorkshop 179 6.1.4 文本编辑器UltraEdit 182 6.2 不同功效的监视工具 187 6.2.1 文件系统监视工具Filemon 187 6.2.2 API函数监视工具 188 6.2.3 MFC(微软库类)监视工具Mfcspy 190 6.3 编辑程序内部资源工具 191 6.3.1 用FreeRes工具修复资源 191 6.3.2 用工具eXeScope编辑程序内资源 192 6.3.3 用工具Festools管理系统资源 194 6.4 制作破解补丁工具 196 6.4.1 补丁制作工具dUP 196 6.4.2 绿色工具XCell 199 6.5 专家点拨:常见问题解答 200 第7章 揭秘壳的不同应用技术 201 7.1 不同的加壳压缩软件 202 7.1.1 DOS窗口下的文件压缩壳软件UPX 202 7.1.2 压缩各种可执行程序的ASPack 203 7.1.3 软件保护压缩工具Armadillo 204 7.1.4 国产外壳保护工具EncryptPE 207 7.2 查壳工具大放送 208 7.2.1 用Language2000查看加壳情况 208 7.2.2 功能强大的PEiDentifier 209 7.3 各具神通的脱壳工具 210 7.3.1 常用ASPack脱壳软件简介 210 7.3.2 通用脱壳工具UnPECompact 211 7.3.3 通用脱壳工具ProcDump 212 7.3.4 脱壳工具大集合UN-PACK 214 7.4 轻松实现手动脱壳 215 7.4.1 用ImportREC实现手动脱壳 216 7.4.2 重建可编辑资源 220 7.5 专家点拨:常见问题解答 220 第8章 别出心裁:为程序打上补丁 222 8.1 常用补丁制作工具 223 8.1.1 专业补丁制作工具CodeFusion 223 8.1.2 内存动态补丁工具Process Patcher 226 8.2 实例:网络客户端程序补丁 228 8.2.1 程序拦截的验证代码 228 8.2.2 增加自动修改机器号功能 229 8.2.3 用补丁修改程序 232 8.2.4 为程序附带一个动态链接库 234 8.2.5 用补丁加密可执行文件 235 8.3 代码自修改SMC技术 238 8.3.1 SMC函数定义 238 8.3.2 实例:SMC补丁技术应用 239 8.4 用CrackCode2000制作注册机 241 8.4.1 快速找到注册码 241 8.4.2 实现内存直接寻址 242 8.4.3 实现寄存器间接寻址 243 8.4.4 为Decompile Winhelp制作注册机 243 8.4.5 实例:CrackCode的加强模式 245 8.5 专家点拨:常见问题解答 247 第9章 网络验证技术大放送 248 9.1 实现Web服务器网络验证 249 9.1.1 加密客户端 249 9.1.2 控制本地计算机 252 9.2 实现本地服务器验证 256 9.2.1 加密客户端 257 9.2.2 加密服务器端 259 9.3 在线升级验证加密技术 261 9.3.1 在线升级验证实现 261 9.3.2 实例分析:在线升级验证 262 9.4 专家点拨:常见问题解答 268 第10章 各种常用加密软件工具的使用 269 10.1 多媒体文件加密工具 270 10.1.1 多媒体加密工具Private Pix 270 10.1.2 图片软件加密工具CryptaPix 272 10.1.3 图片文件专业加密工具WinXFiles 273 10.2 多功能文件加密工具 276 10.2.1 数据加密和安全通讯工具“文件密使” 276 10.2.2 可加密各种格式文件的BlackBox 281 10.2.3 对称加密算法工具ABI-CODER 286 10.2.4 国产加密工具“加密精灵” 288 10.3 专家点拨:常见问题解答 291 第11章 分析软件的不同注册方式 292 11.1 简单的注册码保护方式 293 11.1.1 追踪简单算法 293 11.1.2 简单注册码的破解 294 11.1.3 API函数常用断点及实例 298 11.2 按钮功能限制 308 11.2.1 按钮功能限制概述 308 11.2.2 突破按钮限制 309 11.2.3 按钮限制解密实例 311 11.3 NAG窗口 312 11.3.1 NAG窗口实例1 313 11.3.2 NAG窗口实例2 317 11.4 加密狗解密 319 11.4.1 判断加密狗类型 319 11.4.2 加密狗解密实例 320 11.5 专家点拨:常见问题解答 325 第12章 编辑安装包程序 326 12.1 InstallShield 327 12.1.1 InstallShield使用介绍 327 12.1.2 编辑CAB压缩包 341 12.2 Wise安装包软件 343 12.3 Setup Factory安装包制作工具 343 12.4 Inno Setup安装制作软件 352 12.4.1 Inno Setup的使用介绍 352 12.4.2 Inno Setup的脚本语法介绍 357 12.4.3 压缩包的编辑 360 12.5 微软MSI安装包 360 12.6 专家点拨:常见问题解答 362 第13章 不同软件的保护措施 363 13.1 对抗不同的破解手段 364 13.1.1 对抗DeDe和动态调试 364 13.1.2 对抗SoftICE 365 13.1.3 对抗静态调试 367 13.1.4 实现磁盘文件自校验 368 13.2 不同软件的保护实现 369 13.2.1 把ASP编成DLL 370 13.2.2 COM组件的Delphi实现 372 13.2.3 实现软件注册保护的VCL组件 377 13.2.4 利用伪装壳制造虚假信息 379 13.2.5 利用加密锁保护程序 380 13.3 邮件加密软件PGP 384 13.3.1 PGP概述 384 13.3.2 PGP的安全问题 385 13.4 专家点拨:常见问题解答 390 第14章 常用软件加密解密技术 391 14.1 加密解密Word文件 392 14.1.1 Word自身功能加密 392 14.1.2 利用AOPR解密Word文档 393 14.1.3 风语文件加密工具 395 14.1.4 Word Password Recovery破解工具 395 14.1.5 Word密码查看器 396 14.2 Excel文件加密解密 397 14.2.1 实现Excel自加密 397 14.2.2 办公文件密码恢复程序 398 14.2.3 Excel加密文档解密工具Excel Key 399 14.3 PDF文件的加密解密 400 14.3.1 加密PDF文件 400 14.3.2 使用PDF文件加密器 402 14.3.3 Advanced PDF Password Recovery 404 14.3.4 用PDF Password Remover解除PDF文件口令 406 14.4 宏加密解密技术 408 14.4.1 实现宏技术加密 408 14.4.2 宏解密工具VBA Key 411 14.5 对压缩文件实施加密解密 411 14.5.1 实现WinZip自加密 412 14.5.2 解除ZIP文件口令 413 14.5.3 实现WinRAR自加密 413 14.5.4 解除RAR文件密码 414 14.6 加密解密EXE文件 415 14.6.1 用ASPack加密EXE文件 415 14.6.2 用tElock加密EXE文件 417 14.6.3 为EXE文件加口令 419 14.7 解密MS SQL Server保护 420 14.7.1 实现本地用户的帐户登录 420 14.7.2 查询分析器的使用 420 14.7.3 多功能密码破解软件 421 14.8 加密解密网页与脚本文件 423 14.8.1 网页与脚本的加密 423 14.8.2 网页与脚本的解密 428 14.9 专家点拨:常见问题解答 430
第三卷************** 不错的PDF电子书,共3个分卷,点我名字可以找全 第1部分 逆向101 第1章 基础 3 1.1 什么是逆向工程 3 1.2 软件逆向工程:逆向 4 1.3 逆向应用 4 1.3.1 与安全相关的逆向 5 1.3.2 软件开发中的逆向 8 1.4 底层软件 9 1.4.1 汇编语言 10 1.4.2 编译器 11 1.4.3 虚拟机和字节码 12 1.4.4 操作系统 13 1.5 逆向过程 13 1.5.1 系统级逆向 14 1.5.2 代码级逆向 14 1.6 工具 14 1.6.1 系统监控工具 15 1.6.2 反汇编器 15 1.6.3 调试器 15 1.6.4 反编译器 16 1.7 逆向合法吗? 17 1.7.1 互操作性 17 1.7.2 竞争 18 1.7.3 版权法 19 1.7.4 商业机密和专利权 20 1.7.5 美国数字千禧版权法 20 1.7.6 DMCA案例 22 1.7.7 许可证协议 23 1.8 代码范例与工具 23 1.9 结论 23 第2章 底层软件 25 2.1 高阶视角 26 2.1.1 程序结构 26 2.1.2 数据管理 29 2.1.3 控制流 32 2.1.4 高级语言 33 2.2 低阶视角 37 2.2.1 底层数据管理 37 2.2.2 控制流 43 2.3 汇编语言101 44 2.3.1 寄存器 44 2.3.2 标志位 46 2.3.3 指令格式 47 2.3.4 基本指令 48 2.3.5 范例 52 2.4 编译器和编译入门 53 2.4.1 定义编译器 54 2.4.2 编译器架构 55 2.4.3 列表文件 58 2.4.4 专用编译器 59 2.5 执行环境 60 2.5.1 软件执行环境(虚拟机) 60 2.5.2 现代处理器的硬件执行环境 63 2.6 结论 68 第3章 Windows基础知识 69 3.1 组件及基本架构 70 3.1.1 简要回顾 70 3.1.2 特征 70 3.1.3 支持的硬件 71 3.2 内存管理 71 3.2.1 虚拟内存和分页 72 3.2.2 工作集 74 3.2.3 内核内存和用户内存 74 3.2.4 内核内存空间 75 3.2.5 区段对象 77 3.2.6 VAD树 78 3.2.7 用户模式的内存分配 78 3.2.8 内存管理API 79 3.3 对象与句柄 80 命名对象 81 3.4 进程与线程 83 3.4.1 进程 84 3.4.2 线程 84 3.4.3 运行状态切换 85 3.4.4 同步对象 86 3.4.5 进程初始化顺序 87 3.5 应用程序编程接口 88 3.5.1 Win32 API 88 3.5.2 本地API 90 3.5.3 系统调用机制 91 3.6 可执行文件格式 93 3.6.1 基本概念 93 3.6.2 映像区段(Image Sections) 95 3.6.3 区段对齐(Section Alignment) 95 3.6.4 动态链接库 96 3.6.5 部 97 3.6.6 导入与导出 99 3.6.7 目录 99 3.7 输入与输出 103 3.7.1 I/O系统 103 3.7.2 Win32子系统 104 3.8 结构化异常处理 105 3.9 结论 107 第4章 逆向工具 109 4.1 不同的逆向方法 110 4.1.1 离线代码分析 110 4.1.2 现场代码分析 110 4.2 反汇编器——ILDasm 110 4.3 调试器 116 4.3.1 用户模式调试器 118 4.3.2 内核模式调试器 122 4.4 反编译器 129 4.5 系统监控工具 129 4.6 修补工具 131 Hex Workshop 131 4.7 其他类型的逆向工具 133 可执行程序转储工具 133 4.8 结论 138 第2部分 应用逆向 第5章 未公开的技术 141 5.1 逆向和互操作性 142 5.2 基本原则 142 5.3 定位未公开的API函数 143 我们要找什么? 144 5.4 案例研究:NTDLL.DLL中的 5.4 Generic Table API 145 5.4.1 RtlInitializeGenericTable 146 5.4.2 RtlNumberGenericTableElements 151 5.4.3 RtlIsGenericTableEmpty 152 5.4.4 RtlGetElementGenericTable 153 5.4.5 RtlInsertElementGenericTable 168 5.4.6 RtlLookupElementGenericTable
光盘目录说明 {第1章 基础知识} chap01\Regedit...................注册表读示例 \IniFile...................Ini文件示例 \CustomFile................自定义文件示例 \CreateDLL.................DLL的创建示例 \YSCall....................DLL的隐式调用 \XSCall....................DLL的显式调用 \CreateComponent...........包的示例 \FindWindow................防止多个实例运行(查找窗口法) \Mutex.....................防止多个实例运行(互斥对象) \ATom......................防止多个实例运行(全局原子) \OnceRun(File).............防止多个实例运行(文件保存标志法) \BASM-Source...............Delphi中嵌入汇编例子 \BASM-Class................BASM中访问Delphi对象 \BASM-JMP..................BASM的跳转示例 \BASM-DB、DD、DW...........BASM中的汇编指令 \BASM-Call.................BASM中调用Delphi中的函数和过程 \BASM-CallApi..............BASM中调用API函数 \BASM-Var..................BASM访问函数或过程的参数 \BASM-Asm..................Delphi中的全汇编例程 {第2章 加密算法} chap02\CRC32-Dym.................CRC32算法动态码表实现 \CRC32-Static..............CRC32算法静态码表实现 \MD5.......................MD5算法示例 \SHA.......................SHA算法示例 \DES.......................DES算法示例 \2DES......................双重DES算法示例 \3DES......................两个密钥的三重DES算法示例 \3DES3.....................三个密钥的三重DES算法示例 \Blowfish..................BlowFish算法示例 \AES.......................AES算法示例 \RSA.......................RSA算法示例 \BASE64....................BASE64算法示例 {第3章 软件试用期} chap03\TrialTime(Reg)............软件试用次数(信息入注册表) \TrialTime(Ini)............软件试用次数(信息入Ini文件) \TrialDate(Reg)............软件试用天数(信息入注册表) \TrialDate(Ini)............软件试用天数(信息入Ini文件) \LastDate(Reg).............软件最后试用日期(信息入注册表) \LastDate(Ini).............软件最后试用日期(信息入Ini文件) \RunTime-Timer.............限制软件启动后的执行时间(Timer控件) \RunTime-APi...............限制软件启动后的执行时间(API) \Nag.......................实现Nag窗口的第一种方法 \Nag-Time..................实现Nag窗口的第二种方法 \Time-ing..................时间段限制的第一种方法 \Time-run..................时间段限制的第二种方法 {第4章 反跟踪技术} chap04\Anti-SoftICE..............Anti-SoftICE示例 ├──BackDoor...........SoftICE后门指令 ├──Service............判断NTICE服务是否运行 ├──UEF................利用UnhandledExceptionFilter检测; └──INT41..............INT 41子类型; \Anti-Loader...............Anti-Loader示例 ├──PEB................利用TEB检测 ├──FindWindow.........查找句柄检测 ├──IsDebuggerPresent..利用IsDebuggerPresent检测 ├──Parent.............检查父进程 └──STARTUPINFO........检查STARTUPINFO结构 \Anti-Monitor..............Anti-Monitor示例 ├──FindWindow.........通过查找窗口标题栏 └──Process............通过查找进程 \Anti-Static...............反静态分析示例 ├──Example1...........一般程序示例 ├──Example2...........插入花指令示例 └──Example3...........12组花指令 \Anti-DeDe.................Anti-DeDe示例 ├──Find...............查找进程和窗口 └──Hide...............隐藏事件 \Anti-Unpacking............反脱壳示例 ├──FileSize...........用文件大小校验软件 └──FileCRC32..........校验文件完整性 \Message-Hide..............信息隐藏示例 ├──FileSelf...........把信息隐藏在程序本身 └──OtherFile..........信息隐藏于外部文件中 {第5章 注册认证和注册机} chap05\Algorithms................选用加密算法 ├──MD5Check...........Hash算法作为注册码验证算法 ├──DESCheck...........对称算法作为注册码验证算法 ├──MoreAlg............多种对称算法实现注册验证 └──RSACheck...........公开密钥算法作为注册码验证算法 \Check.....................验证模式 ├──CurrentCheck.......注册码直接验证示例 └──RebootCheck........注册码重启校验示例 \Serial....................硬盘系列号保护方式 ├──HDID...............获取硬盘系列号示例 ├──Check..............硬件系列号保护示例 └──KeyGen.............注册机制作示例 \UserName..................用户名保护方式 ├──Check..............用户名保护示例 └──KeyGen.............注册机制作示例 \SerilaAndName.............硬件系列号与用户名保护方式 ├──Check..............硬件系列号与用户名保护示例 └──KeyGen.............注册机制作示例 \Random....................随机注册码模式 ├──Check..............随及注册码保护示例 └──KeyGen.............注册机制作示例 \KeyFile...................KeyFile保护方式 ├──Check..............KeyFile保护示例 └──KeyGen.............注册机制作示例 \CallDllCheck..............用DLL实现注册认证 └──CallCheck..........用DLL实现注册认证的示例 \DLLProtect................DLL控件保护示例 ├──Delphi.............Delphi调用示例 └──VB.................VB调用示例 \BPLProtect................BPL控件保护示例 └──CallBPL............调用BPL控件示例 \Compelet..................一套完整的软件保护示例 ├──Check..............软件保护示例 └──KeyGen.............注册机制作示例 {第6章 网络验证} chap06\WebCheck..................WEB服务器验证 ├──Client.............客户端实现示例 └──LocalControl.......本地控制程序实现示例 \ServerCheck...............本地服务器验证 ├──Client.............客户端实现示例 └──Server.............服务器实现示例 \Update....................在线升级验证示例 {第7章 PE文件知识} chap07\DOS Header................获取DOS部信息示例 \PE Header.................获取PE部信息示例 \Optional Header...........获取可选部信息示例 \Section Table.............获取区块表信息示例 \Import Table..............获取输入表信息示例 \Export Table..............获取输出表信息示例 {其它源码} ToolsTest\OllyDbg................OllyDbg调试例子 \DeDe...................DeDe反编译例子
对于希望自己软件加密的,绝对值得你研究,我自己就从书中代码获益颇多,给自己的商业软件加密了。共分为五个文件,希望对你有帮助。本人缺分,也希望多些人下载,(*^__^*) 嘻嘻…… 光盘目录说明 {第1章 基础知识} chap01\Regedit...................注册表读示例 \IniFile...................Ini文件示例 \CustomFile................自定义文件示例 \CreateDLL.................DLL的创建示例 \YSCall....................DLL的隐式调用 \XSCall....................DLL的显式调用 \CreateComponent...........包的示例 \FindWindow................防止多个实例运行(查找窗口法) \Mutex.....................防止多个实例运行(互斥对象) \ATom......................防止多个实例运行(全局原子) \OnceRun(File).............防止多个实例运行(文件保存标志法) \BASM-Source...............Delphi中嵌入汇编例子 \BASM-Class................BASM中访问Delphi对象 \BASM-JMP..................BASM的跳转示例 \BASM-DB、DD、DW...........BASM中的汇编指令 \BASM-Call.................BASM中调用Delphi中的函数和过程 \BASM-CallApi..............BASM中调用API函数 \BASM-Var..................BASM访问函数或过程的参数 \BASM-Asm..................Delphi中的全汇编例程 {第2章 加密算法} chap02\CRC32-Dym.................CRC32算法动态码表实现 \CRC32-Static..............CRC32算法静态码表实现 \MD5.......................MD5算法示例 \SHA.......................SHA算法示例 \DES.......................DES算法示例 \2DES......................双重DES算法示例 \3DES......................两个密钥的三重DES算法示例 \3DES3.....................三个密钥的三重DES算法示例 \Blowfish..................BlowFish算法示例 \AES.......................AES算法示例 \RSA.......................RSA算法示例 \BASE64....................BASE64算法示例 {第3章 软件试用期} chap03\TrialTime(Reg)............软件试用次数(信息入注册表) \TrialTime(Ini)............软件试用次数(信息入Ini文件) \TrialDate(Reg)............软件试用天数(信息入注册表) \TrialDate(Ini)............软件试用天数(信息入Ini文件) \LastDate(Reg).............软件最后试用日期(信息入注册表) \LastDate(Ini).............软件最后试用日期(信息入Ini文件) \RunTime-Timer.............限制软件启动后的执行时间(Timer控件) \RunTime-APi...............限制软件启动后的执行时间(API) \Nag.......................实现Nag窗口的第一种方法 \Nag-Time..................实现Nag窗口的第二种方法 \Time-ing..................时间段限制的第一种方法 \Time-run..................时间段限制的第二种方法 {第4章 反跟踪技术} chap04\Anti-SoftICE..............Anti-SoftICE示例 ├──BackDoor...........SoftICE后门指令 ├──Service............判断NTICE服务是否运行 ├──UEF................利用UnhandledExceptionFilter检测; └──INT41..............INT 41子类型; \Anti-Loader...............Anti-Loader示例 ├──PEB................利用TEB检测 ├──FindWindow.........查找句柄检测 ├──IsDebuggerPresent..利用IsDebuggerPresent检测 ├──Parent.............检查父进程 └──STARTUPINFO........检查STARTUPINFO结构 \Anti-Monitor..............Anti-Monitor示例 ├──FindWindow.........通过查找窗口标题栏 └──Process............通过查找进程 \Anti-Static...............反静态分析示例 ├──Example1...........一般程序示例 ├──Example2...........插入花指令示例 └──Example3...........12组花指令 \Anti-DeDe.................Anti-DeDe示例 ├──Find...............查找进程和窗口 └──Hide...............隐藏事件 \Anti-Unpacking............反脱壳示例 ├──FileSize...........用文件大小校验软件 └──FileCRC32..........校验文件完整性 \Message-Hide..............信息隐藏示例 ├──FileSelf...........把信息隐藏在程序本身 └──OtherFile..........信息隐藏于外部文件中 {第5章 注册认证和注册机} chap05\Algorithms................选用加密算法 ├──MD5Check...........Hash算法作为注册码验证算法 ├──DESCheck...........对称算法作为注册码验证算法 ├──MoreAlg............多种对称算法实现注册验证 └──RSACheck...........公开密钥算法作为注册码验证算法 \Check.....................验证模式 ├──CurrentCheck.......注册码直接验证示例 └──RebootCheck........注册码重启校验示例 \Serial....................硬盘系列号保护方式 ├──HDID...............获取硬盘系列号示例 ├──Check..............硬件系列号保护示例 └──KeyGen.............注册机制作示例 \UserName..................用户名保护方式 ├──Check..............用户名保护示例 └──KeyGen.............注册机制作示例 \SerilaAndName.............硬件系列号与用户名保护方式 ├──Check..............硬件系列号与用户名保护示例 └──KeyGen.............注册机制作示例 \Random....................随机注册码模式 ├──Check..............随及注册码保护示例 └──KeyGen.............注册机制作示例 \KeyFile...................KeyFile保护方式 ├──Check..............KeyFile保护示例 └──KeyGen.............注册机制作示例 \CallDllCheck..............用DLL实现注册认证 └──CallCheck..........用DLL实现注册认证的示例 \DLLProtect................DLL控件保护示例 ├──Delphi.............Delphi调用示例 └──VB.................VB调用示例 \BPLProtect................BPL控件保护示例 └──CallBPL............调用BPL控件示例 \Compelet..................一套完整的软件保护示例 ├──Check..............软件保护示例 └──KeyGen.............注册机制作示例 {第6章 网络验证} chap06\WebCheck..................WEB服务器验证 ├──Client.............客户端实现示例 └──LocalControl.......本地控制程序实现示例 \ServerCheck...............本地服务器验证 ├──Client.............客户端实现示例 └──Server.............服务器实现示例 \Update....................在线升级验证示例 {第7章 PE文件知识} chap07\DOS Header................获取DOS部信息示例 \PE Header.................获取PE部信息示例 \Optional Header...........获取可选部信息示例 \Section Table.............获取区块表信息示例 \Import Table..............获取输入表信息示例 \Export Table..............获取输出表信息示例 {其它源码} ToolsTest\OllyDbg................OllyDbg调试例子 \DeDe...................DeDe反编译例子

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧