第二节 反跟踪技术1、Anti-Debug1.MeltICE子类型类型:检测SoftICE、TRW2000平台:Windows9x、Windows NT原理:用CreateFileA( )或_lopen( )函数试图获得SoftICE的驱动程序"\\.\SICE"(Windows9X版本)、"\\.\SIWDEBUG"、"\\.\NTICE"(Windows NT版本)、"\\.\SIWVID"等的句柄,如果成功则说明SoftICE驻留在内存中。2.VWIN32_Int41Dispatch子类型类型:检测SoftICE平台:Windows9x原理:VWIN32.VxD(其VxD ID为0x002A)提供一个名为VWIN32_Int41Dispatch的VxD service(其service ID为0x002A),系统内核使用此服务来与系统级调试器如WinDBG、SoftICE等进行通信。其中0x4F号子功能是用来查询调试器是否已经驻留内存并能否处理保护模式程序,如果是的话则调试器应返回0xF386。3.给SoftICE发送命令类型:检测SoftICE平台:Windows9x、Windows NT原理:通过调试中断int 3给SoftICE发送命令让其执行,其中SI和DI寄存器中放的分别是固定值0x4647("FG")和0x4A4D("JM")。AX中存放的是子功能号,值为0x0911则表示让SoftICE执行命令,此时DX指向一个命令字符串如"HBOOT"等。AX还可以为其它子功能号,比如让SoftICE修改断点设置等。4、BoundsChecker后门类型:检测SoftICE平台:Windows9x、Windows NT原理:这是SoftICE为BoundsChecker留的一个公开的接口,入口参数EBP = 0x4243484B(即"BCHK"),AL =4,如果SoftICE在内存中则应返回AL = 0。这种方法一般也要结合SEH?(结构异常处理)来实现,否则当SoftICE不存在时就会引起非法操作。5.ICECream子类型类型:检测SoftICE、TRW2000平台:Windows9x原理:调试器驻留后修改INT 1和INT 3的入口,指向它自己的处理程序,
所以入口高位偏移与其他中断不同。其他所有中断入口高位偏移都相同。6.INT 68h子类型类型:检测SoftICE平台:Windows9x原理:MOV AH, 43hINT 68hCMP AX, 0F386h ;检测此处是否被调试器设置0F386hJZ SoftICE_is_here7.搜索特征串类型:检测SoftICE平台:Windows9x原理:通过在内存中搜索SoftICE的特征串来发现SoftICE,这一般要结合SEH一起使用,以
防止引起内存保护出错而使得程序被终止。这种方法在DOS下是可行的。由于Windows95之后的操作系统中的每个ring 3进程的地址空间是独立的,使得这种方法受到限制。比如在内存中搜索"WINICE.BR"。8.IsDebuggerPresent子类型类型:检测SoftICE平台:Windows NT原理:调用kernel32.dll输出的函数IsDebuggerPresent()来检测是否有调试器存在。这个函数只能检查使用Debug API来跟踪程序的调试器,无法检测SoftICE之类的系统级调试器。2、Anti-静态分析1.死循环语句类型:对付W32Dasm平台:Windows9x 、Windows NT原理:下面是故意在程序中插入的一个死循环,可能会使W32Dasm的某些版本停止响应:0401000 JMP 00401005……00401005 JMP 00401000对策:W32Dasm进入死循环后,用Bpx hmempcy设断,来到死循环代码处,将其跳出死循环,或用IDA来反汇编。 2.利用花指令花指令是对付静态分析的重要手段。以下是一段汇编源程序:start_: xor eax,1 add eax,2 jmp label1 label1: xor eax,3 add eax,4 xor eax,5 end start_ 此时把源程序进行编译,
然后用W32Dasm进行反汇编,得到的反汇编结果完全正常。接着我们将上述源程序作如下修改:start_: xor eax,1 add eax,2 jnz label1 ;注意这里,用两句条件跳转代替了:jmp label1 jz label1 db 0E8h ;注意这个无用的字节和源程序的区别label1: xor eax,3 add eax,4 xor eax,5 end start_ 再把源程序进行编译,然后用W32Dasm进行反汇编,
来看一下反汇编后的结果::00401000 83F001:00401003 83C002:00401006 7503:00401008 7401:0040100A E883F00383:0040100F C00483F0xor eax, 00000001add eax, 00000002jne 0040100Bje 0040100Bcall 83440092rol byte ptr [ebx+4*eax], F0结果令人很吃惊,会发现W32Dasm反汇编的结果和事先写的汇编指令不一样,从反汇编的结果中已经无法理解程序的"真实"的功能了,W32Dasm给出了一个意想不到的答案。 这
是因为上述改动是为了在W32Dasm的反汇编工作中做点手脚,从而使得它犯下错误。
那么W32Dasm为什么会因此而犯下这样的错误呢?不同的机器指令包含的字节数并不相同,
有的是单字节指令,有的是多字节指令。对于多字节指令来说,反汇编软件需要确定指令的第一个字节的起始位置,也就是操作码的位置,这样才能正确地反汇编这条指令,否则它就可能反汇编成另外一条指令了。 如果在程序中加入一些无用的字节来干扰反汇编软件的判断,从而使得它错误地确定指令的起始位置,那么也就达到了干扰W32Dasm反汇编工作的目的。通过
前面的介绍,知道由于"无用的字节"干扰了W32Dasm对指令起始位置的判断,从而导致反汇编的错误结果,所以如果能让W32Dasm正确地识别出指令起始位置,也就达到了去除花指令的目的了。比如可以把那些无用的字节都替换成单字节指令,最常见的一种替换方法是把无用的字节替换成 NOP 指令,即十六进制数 90。 1 2 3 4 5 6 7 下一页>> 内容导航 给力(0票)动心(0票)废话(0票)专业(0票)标题党(0票)路过(0票) 原文:一步一步教你加密解密技术——软件保护技术(2)(1) 返回网络安全首页
一步一步教你加密解密技术——软件保护技术(2)(1)
时间: 2024-10-30 11:32:04
一步一步教你加密解密技术——软件保护技术(2)(1)的相关文章
一步一步教你加密解密技术——软件保护技术(1)(1)
第6章 软件保护技术第一节 常见保护技巧1.序列号方式(1)序列号保护机制数学算法一项都是密码加密的核心,但在一般的软件加密中,它似乎并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧.但近几年来随着序列号加密程序的普及,数学算法在软件加密中的比重似乎是越来越大了. 我们先来看看在网络上大行其道的序列号加密的工作原理.当用户从网络上下载某个shareware--共享软件后,一般都有使用时间上的限制,当过了共享软件的试用期后,你必须到这个软件的公司去注册后方能继续使用.注册过程一
一步一步教你加密解密技术——压缩与脱壳(1)(1)
压缩与脱壳第一节 PE文件格式PE教程1: PE文件格式一览PE 的意思就是 Portable Executable(可移植的执行体).它是 Win32环境自身所带的执行体文件格式.它的一些特性继承自 Unix的 Coff (common object file format)文件格式."portable executable"(可移植的执行体)意味着此文件格式是跨win32平台的 : 即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格
一步一步教你加密解密技术——动态分析技术(1)
第2章 动态分析技术第一节 SoftICE与TRW2000安装安装与配制SOFTICE有几个平台的版本,DOS,WINDOWS 3.0,Windows 95/98,WINDOWS NT,等. 由于现在最普及的操作系统是 Windows 95/98.Windows NT.Windows Millennium.Windows2000因此就讲讲SOFTICE在这几个平台安装时的一些注意事项.一.SOFTICE for win9x安装与配制㈠.SOFTICE安装 1.SOFTICE目前最新版本是4.05
一步一步教你加密解密技术——压缩与脱壳(3)(1)
第四节 手动脱壳1.基本知识手动脱壳就是不 借助自动脱壳工具,而是用动态调试工具SOFTICE或TRW2000来脱壳.这课谈谈一些入门方面的知识,如要了解更深的脱壳知识,请参考<脱壳高级篇>这课.工具*调试器:SoftICE .TRW2000*内存抓取工具:Procdump等:*十六进制工具:Hiew.UltraEdit.Hex Workshop等:*PE编辑工具: Procdump.PEditor等:名词概念★PE文件:Microsoft设计了一种新的文件格式Portable Executa
一步一步教你加密解密技术——函数、资源与注册表(1)
第4章 函数.资源与注册表第一节 Win32 API 函数1.限制程序功能函数1.EnableMenuItem允许.禁止或变灰指定的菜单条目2.EnableWindow允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰) 2.对话框函数CreateDialog从资源模板建立一非模态对话窗CreateDialogParam 从资源模板建立一非模态对话窗CreateDialogIndirect 从内存模板建立一非模态对话窗CreateDialogIndirectParam从内存模板建立一非模态对
一步一步教你加密解密技术——注册机和补丁制作(1)
注册机和补丁制作第一节 概念介绍 何为注册机?注册机就是针对某一软件,通过一定算法算出注册码的程序.我们写注册机时,一般都要了解注册码的算法(这当然是通过跟踪调试了解的),之后用汇编语言或其它 高级语言来把算法还原.这样大家可根据自己的要求输入注册码,如根据自己的姓名,公司的名称注册. 目前 共享软件有两种注册方式: 一 种是交费后,作者给寄有全部功能的 Register软件,原来的Shareware根本没有某些功能: 第二种交费后, 作者给你个注册码(RegisterNumber),注册后功能
一步一步教你加密解密技术——压缩与脱壳(4)(1)
第五节 脱壳高级篇1. 认识Import表著者: [yAtEs] [Jamesluton@hotmail.com] 译者:hying[CCG] 标题:PE输入表说明有很多介绍PE文件的文章, 但是我打算写一篇关于输入表的文章,因为它对于破解很有用. 我想解释它的 最好的方法是举一个例子,你可以跟着我逐步 深入,一步一步的思考,最后你将完全 明白,我选择了一个我刚下载下来的小程序,它是用TASM编译的,有一个比较小的输入表,所以我想它应该是个不错的范例. 好了,让我们开始吧. 首先我们得找到输入表
一步一步教你加密解密技术——压缩与脱壳(2)(1)
第二节 认识脱壳作为一个以"壳"为主的站台,如果连访者连什么是"壳"都不清楚的话,那我也太失败了.很早以前就想写编完全关于"壳"的文章,但苦于时间和文字水平的关系,都没提笔. 首先我想大家应该先 明白"壳"的概念.在自然界中,我想大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等.同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序.它们一般都是先于程序运行,拿到控制权,然后完成它
一步一步教你加密解密技术——软件保护技术(3)(1)
第三节 加密算法1.RSA算法它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman.但RSA的安全性一直未能得到理论上的证明.它经历了各种攻击,至今未被完 全攻破.一.RSA算法 : 首先,找出三个数,p,q,r,其中p,q是两个相异的质数,r是与(p-1)(q-1)互质的数......p,q,r这三个数便是privatekey接著,找出m,使得rm==1mod(