脱壳&破解技巧

                                                          暴力破解的一般流程
1、有壳者要先脱壳
2、试注册看看有何提示,让我们抓抓小尾巴
3、若有提示,用OD动态调试器或者是W32静态调试器查找注册提示
4、来到错误提示处分析代码找关键CALL、关键跳!
5、修改代码
6、复制保存!

如果没有提示,我们可以使用很多断点来完成这些操作
现今软件的保护方式
1、序列号保护方式(注册码=f(机器码/序列号))
2、警告(NAG)窗口
3、时间限制/次数限制。。
4、菜单功能限制
5、Key File保护
6、CD-Check
7、只运行一个实例

一些软件通过把注册码保存在 .ini文件注册表、.dat文件 等等方式进行注册验证

常见断点设置

字符串
bp GetDlgItemTextA(W) ****
bp GetDlgItemInt
bp GetWindowTextA(W) ****
bp GetWindowWord
bmsg XXXX wm_gettext

对话框
bp MessageBeep
bp MessageBoxA(W) ****
bp MessageBoxExA(W)
bp DialogBoxParamA(W)
bp GreateWindowExA(W)
bp ShowWindow
bp UpdateWindow
bmsg XXXX wm_command

对于VB的程序用 bp MessageBoxA 是无法断下来的,bp rtcMsgBox

注册表相关
bp RegCreateKeyA(W)
bp RegDeleteKeyA(W)
bp RegQueryValueA(W)
bp RegCloseKey
bp RegOpenKeyA(W) ****

时间相关
bp GetLocalTime
bp GetFileTime
bp GetSystemtime

CD-ROM或磁盘相关
bp GetFileAttributesA(W)
bp GetFileSize
bp GetDriveType
bp GetLastError
bp ReadFile
bpio -h (CD-ROM端口地址) R

软件狗
bpio -h 278R
bpio -h 378R

INI 初始化文件相关
bp GetPrivateProfileStringA ****
bp GetPrivateProfileInt
bp WritePrivateProfileString
bp WritePrivateProfileInt

文件访问相关
bp ReadFile
bp WriteFile
bp CreateFileA ****
bp SetFilePointer
bp GetSystemDirectory

通过网络验证: 一般应用于外挂程序上较多,一般是改网络验证为本地验证达到欺骗远程网络主机的目的达到通过验证!
重启验证来判断程序是否注册: 是很常见的,他一般把用户输入的注册码直接或者是通过加密运算后得到的数值保存到文件、注册表中,然后提示用户重启验证是否注册,当你重新打开程序的时候他会从文件或者是注册表中读取用户输入的注册码,再通过程序注册算法来进行比照,正确者当然就成为正版,错误的自然就 88 了,另外以重启验证的软件一般是把注册码保存在注册表或文件中!

下面来说说解决这类软件的一般方法!

重启验证类软件大致的验证过程。
1、运行软件, 输入注册信息,点注册后。一般软件会提示你重新运行软件,以便验证注册信息的正确性(如FlashGet);
也有的只在你输入正确的注册信息时才有这个提示,不然会告诉你输入的注册信息有问题(此软件就属这类)

2、要破解这种软件,首先是判断一下她把注册信息存在哪里(因为她重启验证时要用)。大致有两种存放方式,第一种是放在注册表里;第二种是放在文件里。(我们可以在输入注册信息,点击确定前,利用监视类软件来查看一下,如FileMon和RegShot等)

3、知道她的注册信息的存放地点后,就可以选则相应的API断点,来调试了

访问注册表类常用API
bp RegOpenKeyA 打开一个现有的注册表项 ****
bp RegOpenKeyExA 打开一个现有的注册表项 ****
bp RegCreateKeyA 在指定的项下创建或打开一个项
bp RegCreateKeyExA 在指定项下创建新项的更复杂的方式
bp RegDeleteKeyA 删除现有项下方一个指定的子项
bp RegDeleteValueA 删除指定项下方的一个值
bp RegQueryValueA 获取一个项的设置值
bp RegQueryValueExA 获取一个项的设置值
bp RegSetValueA 设置指定项或子项的值
bp RegSetValueExA 设置指定项的值
bp RegCloseKey 关闭系统注册表中的一个项(或键)

访问文件类常用API
bp CreateFileA 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 ****
bp OpenFile 这个函数能执行大量不同的文件操作
bp ReadFile 从文件中读出数据
bp ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调
....................................................................................................................................................

常见脱壳方法

预备知识

1.PUSHAD (压栈) 代表程序的入口点,
2.POPAD   (出栈) 代表程序的出口点,与PUSHAD 相对应,一般找到这个OEP就在附近
3.OEP:程序的入口点,软件加壳就是隐藏了 OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。

方法一:单步跟踪法
1.用OD载入,点“不分析代码!”
2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4)
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP
6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。

Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9 运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP!

方法二:ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行设置 ESP 的硬件访问断点,就会一下来到程序的OEP了!)
1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。(这只是一般情况下,更确切的说我们选择的 ESP 值是关键句之后的第一个ESP值)
2.在命令行下:dd XXXXXXXX( 指在当前代码中的ESP地址,或者是hr XXXXXXXX ),按回车!
3.选中下断的地址,断点--->硬件访--->WORD断点。
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。

方法三:内存镜像法
1:用 OD 打开软件!
2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序!
3:按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也就是00401000处),按F2下断点!然后按SHIFT+F9(或者是在没异常情况下按F9),直接到达程序OEP!


方法四:一步到达OEP
1.开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2,F9运行到此处
2.来到大跳转处,点下F8,到达OEP!

方法五:最后一次异常法
1:用 OD 打开软件
2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序
3:一开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数m!
4:CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数m-1次)
5:在 OD 的右下角我们看见有一个"SE 句柄",这时我们按CTRL+G,输入SE 句柄前的地址!
6:按 F2 下断点!然后按 SHIFT+F9 来到断点处!
7:去掉断点,按F8慢慢向下走!
8:到达程序的OEP!

方法六:模拟跟踪法
1:先试运行,跟踪一下程序,看有没有 SEH 暗桩之类
2:ALT+M打开内存镜像,找到(包含=SFX,imports,relocations)

内存镜像,项目 30
地址=0054B000
大小=00002000 (8192.)
Owner=check    00400000
区段=.aspack
包含=SFX,imports,relocations
类型=Imag 01001002
访问=R
初始访问=RWE

3:地址为0054B000,于是我们在命令行输入tc eip<0054B000,回车,正在跟踪ing。。

Btw:大家在使用这个方法的时候,要理解他是要在怎么样的情况下才可以使用

方法七:“SFX”法
1:设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
2:切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定。
3:重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP)
 

但愿大家互相进修进修,大家对于破解都不是很了解,人们想学破解,可是去无从入手,所以决议为大家写1个破解初级读物的教程,但愿能大家了解破解有一些帮忙,但愿能有更多的人踏入破解的大门   1.低级,修改步伐,用ultraedit等东西修改exe文件,称暴力破解,略称爆破   中级,追出软体的注册码   高级,开具注册机   2.经常使用破解东西   (1)侦壳东西:PEiD   (2)消息联合的OllyDbg引领破解东西的新潮水   一,此刻咱们起首来进修下破解的开端,爆破~   1.侦壳   要破解1个软体起主要做的就是侦壳,要侦壳就要对壳有绝对似的了解,家喻户晓,软体作者用编程语言编著好软体后,是将它编译成扩展名为EXE的可执行文件编译为EXE的目的有两点:   (1)有一些版权信息需要掩护起来,不克不及让别人随心改动,如作者的姓名、软体名称等;   (2)需要给步伐"瘦身",从而利便存储、使用以及网上传道输送   为了编译,会用到一些软体它们能将可执行文件压缩以及对信息加密(图1),实现上面所说的两个功效,这些个软体称为加壳软体为软体加上的东东就称为"壳"加壳软体差别于一般的WinZIP、WinRAR等打包类压缩软体加壳软体是压缩可执行文件的,压缩后的文件可以直接运行   最多见的加壳软体有3个:ASPACK 、UPX、PEcompact终究它们是主流,据计数,用它们加壳的软体约占市面所有软体的90%!其它不经常使用的加壳软体有ASPROTECT、PETITE 、NEOLITE、TELOCK等软体最多见的编程语言是Delphello,Visual Basic(略称VB),Visual C++(略称VC)了解些编程的常识,会让破解更加轻车熟道   底下来讲侦壳,此刻比力经常使用侦壳软体就PeiD,他具备华美的图形界面外壳整合(新增到鼠标右键)功效令使用更加利便,撑持拖放操作配置时,务请将"扩展到鼠标右键"打上对号   其使用要领是,鼠标点住XX.exe,按鼠标右键,选"使用PEid扫描"便可;"壳"的信息就显示在底部   2.破解东西OD   有关OD的先容我把他放到附件里了,这个是看雪论坛的先容,是比力周全的,至少我感觉比我写的要好,所以大家根据他可以大好的了解OD   3.爆破实例   爆破是破解的开端,所说的爆破,就是指路程经过过程修改可执行文件的源文件,降临达相应的目的你半大白?呵呵,举个例子好了,好比说某同享软体,它比力用户输入的注册码,要是用户输入的,跟它路程经过过程用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码不错了),那末它就会跳到注册乐成的处所去,不然就跳到堕落的处所去   大白过来了吧,咱们只要找到这个跳转指令,把它修改成咱们需要的"造型",如许,咱们是否就可认随心所欲了?   一,破解时经常使用的汇编指令如下,汇编较弱者可先强行违住,以后就可逐步理解了   cmp a,b //比力a与b   mov a,b //把b的值送给a,使a=b   ret //归回主步伐   nop //无效用,英文"no operation"的简写,意思是"do nothellong"(呆板码90) (解释:ultraedit打开编辑exe文件时瞅见90,等同于汇编语句nop)   call //挪用子步伐,子步伐以ret末端   je 或jz //若相等则跳(呆板码74 或0F84)   jne或jnz //若不相等则跳(呆板码75或0F85)   jmp //无前提跳(呆板码EB)   jb //若小于则跳   ja //若大于则跳   jg //若大于则跳   jge //若大于等于则跳   jl //若小于则跳   jle //若小于等于则跳   pop xx //xx出栈   push xx //xx压栈   更为具体的指令请查阅汇编册本   4.破解常见修改,参看表1   汇编指令修改 相应的呆板码修改(路程经过过程16进制编辑器实现)   jnz/jne->nop 75->90   jnz/jne -> jmp 75-> EB   jz/je->nop 74->90   jz/je -> jmp 74-> EB   jnz -> jz 75->74 或 0F 85 -> 0F 84   jz -> jnz 74->75 或 0F 84 -> 0F 85   jnz -> jz 75->74 或 0F 85 -> 0F 84   je-> jne 74->75 或 0F 84 -> 0F 85   表1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue_Dream_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值