shark恒第一期教程学习记录

福利:http://pan.baidu.com/share/home?uk=2804940801#category/type=0

看书是必须的,汇编啊,《加密与解密》,《逆向工程核心原理》…..,但是最终还是要回到实践上,

之前都是接触web,写这个只是加深印象,大牛勿喷

第一课

这里利用的是字符串搜索,跟着查找到关键的jmp指令,然后修改(一般称爆破)

打开软件,输入密码(这个软件已经被脱壳了的,所以不用查壳了,做了之后可看到脱壳之后,没有什么反调试什么的是多么容易破解),记录关键字符串

QQ20160606170644

用od打开,查找字符串

QQ20160606171047

查找”密码错误“那个字符,并双击那个位置QQ20160606171125

在注意到密码错误上三句有个大于号,说明其他地方跳转过来我们在539ac0下断点(f2),跟着运行,QQ20160606171424

随便输入密码,跟着回到od就暂停了,看到test al,al, 作用相当于and al,al,但test不改变al的值,只改变标志位,可以看到al为1,and后结果也是1,所以ZF位还是0,jnz就是当ZF位为0的跳转,(ZF为0说明上一次的运算结果不为0,如上一次的运算结果为0,那ZF就是1了),所看看到下面的信息是跳转已实现,跳到密码错误那里了,我们的目的是不要跳,那我们可以把jnz那条指令nop掉,就不会跳了,还可以把jnz改成jz,这样错误的密码就不会跳,正确的反而会跳,比nop差一点而已。

QQ20160606172024

改了之后。保存到文件,还是放到那个目录,那就随便输密码都可以了

QQ20160605141147

第二课

没有源程序,但也差不多,查找字符串,定位到关键代码,查找关键跳,je直接改成jmp就行了

第三课

这里作者是带壳破解,f9运行起来后,直接转到401000处查找字符串“未购买”,查看到访问注册表的,下个断点,直接从栈中可看到注册码

但我就尝试脱壳再破解,先查壳

QQ20160606174023

这个esp定律很简单的手脱,就是下硬件断点

硬件断点分为:硬件执行断点(ON EXECUTION),硬件写入断点(ON WRITE),硬件访问断点(ON ACCESS)3种。

因为这个壳一开始用pushad将8个寄存器入栈,壳对代码解密完毕肯定要popad,而且popad完后栈跟刚载入od时肯定是一样的,这就是栈平衡原理

QQ20160606174551

在命令行输入hw 12ffc0,因为载入od时esp为12ffc4,入口地址一般是push ebp,那么就对esp-4的地址进行写入了,所以我们在12ffc0下一个硬件写入断点,hw中的w就是write,那么设置访问断点就是hr(read),执行断点就是he

QQ20160606181008

可以看到确实是硬件

QQ20160606181312

f9运行,停了下来,这代码不像入口点

QQ20160606181415

再f9运行,这里应该是了,因为之前没解密,od认不出来,现在解密了,再让od分析一下代码

QQ20160606181446

这样即可看到熟悉的入口点

QQ20160606181646

因为映像基址是00400000,所以oep的RVA就是BD9E5

首先导出映像

QQ20160606181923

跟着用importREC重建输入表,这就脱完壳了

QQ20160606182045

脱壳完了就先打开软件输入用户名和注册码,自己输入的一定要记住,我就输入giant,注册码就多个1:   11111111111111,不然在程序中出现了也不知道,他这个是重启后验证的

跟着载入od,这才查找“未购买”的字符,定位到那段代码后向上看(大概翻1页吧),好像有个注册表似的东西,Software那个

QQ20160606182852

下断点,f9后程序就暂停,一直单步f8,你会看到这过程他会从注册表中获取用户名和注册码,同时栈中出现了可疑字符串很可能就是注册码,测试过确实是的

QQ20160606183902

QQ20160606184052

第四课

这个也没程序,上网找了个,peid查了查是NsPack 3.x,也是esp定律

脱壳后发现打开不了,据说是文件校验,下断getfilesize,因为这里应该是要要看看文件大小有没有改变吧

QQ20160606185918

f9运行后,断在了系统的GetFileSize那里,那么栈顶储存的就是返回地址,直接跟随一下,就回到在哪调用的GetFileSize

QQ20160606190142

我们单步几次,可以看到两个cmp

QQ20160606190240

c6c8就是文件大小吧,但好像又有点差别,不知道为啥呢

QQ20160606194151

我们把那两个ja(a:above),因为脱壳了的话文件会变大嘛,一般壳都有压缩功能了

QQ20160606194956

保存到文件就可以了,不过这个本来就不用注册码的,学习就好了

第五课

查壳,没壳,Delphi写的

运行,看看

QQ20160606200518

那查找关键字“注册”

QQ20160606200835

竟然找到注册成功的了,跟过去,发现有个跳转越过了这里

QQ20160606200947

发现一个关键call我们让那个call返回不是0,那就可以做到不跳转了

QQ20160606201039

跟进那个call,改了前面两行代码

QQ20160606201201

最后复制到文件即可

第六课

这个没给源程序,就是vmp的壳吧算是,这应该是常说的虚拟机吧,直接载入od,f9运行,转到401000查找字符串,跟着把关键跳nop掉

第七课

首先打开看看,发现它写入配置文件再重启验证

QQ20160606223432

peid查一下,vmp的虚拟机加的

QQ20160606223700

VMProtect 是一个软件保护软件。通过这个软件保护的代码部分在虚拟机上执行,这使得被保护的程序很难被分析与破解。反汇编程序与MAP文件的运用使您能快速选择需要保护从而避免破解的代码。

因为要打开ini文件后,读取文件内容,才进行注册码的运算比对,所以我们在ReadFile API下断点

QQ20160606224439

跟着转到401000查找字符串,直接看到打开程序后的第一个提示的字符串,跟过去

QQ20160606224956

看到关键跳,这个可以跳过没注册的,删除前面的api断点,在jnz下个断点,f9运行,可以看到栈中出现了像验证码的东西,复制下来验证

QQ20160606225235

可以看到的确是正确的

QQ20160606225319

第八课

这个也是没给程序,大概回忆一下,因为打开程序后注册,弹出注册失败的框,直接给MessageBox下断点,返回两次后才找到关键跳,直接nop掉就可以了

第九课

打开后输入注册码,到ini里面去了,又是重启读取文件的

QQ20160606231210

 

查一下,好像有壳

QQ20160606231242

直接运行,下断点

GetPrivateProfileString应该是读取ini文件的api函数,

英文描述:The GetPrivateProfileString function retrieves a string from the specified section in an initialization file.

QQ20160606231932

或者cmd直接输入QQ20160606232156

f9运行后,断下来了,alt+f9回到用户代码领空

QQ20160606232622

单步多几次,注入留意堆栈的变化,

或者按一次f9再次断在GetPrivateProfileString,这次提取RegCode,再回到领空,走几步就在堆栈看到两个可以的,验证可知第二个可以

QQ20160606233531

QQ20160606235140

第十课

PEID查壳 Microsoft Visual Basic 5.0 / 6.0,没加壳,作者那里是查不出来,可能程序有出入

先看看我的,就是常规的,打开注册试试QQ20160607125744

搜字符串,就找到“注册码错”这个字符串了,直接找关键跳,把它nop掉,f9一下就可以了,破解状态应该保存在文件中,下次就不用在验证了QQ20160607130330

作者是,到user32下万能断点QQ20160607132111

查找二进制串

QQ20160607132031

f9运行,输入注册码后,对刚才找到的位置下断,再按确认

QQ20160607132434

跟着暂停后回到程序领空,单步到strcmp那里,就可看到注册码QQ20160607132626

确实注册成功

QQ20160607132707

右边的立即注册按钮也消失了QQ20160607132726

第十一课

打开看看,看完就关掉了,因为只能有一个进程在运行,呆会我们还要上od

QQ20160607134027

vb写的,没壳

QQ20160607134112

下个断点MsgBox断点,VB API

QQ20160607134151

f9,点击注册后,回到程序领空,看到有个跳转跳到注册码错误来了

QQ20160607134620

跟过去,下个断再运行注册,发现跳转实现,猜想没错,

nop掉,再f9,发现注册码都帮我们填好了

QQ20160607134712

QQ20160607134746

第十二课

作者是破解弹窗,就关闭软件会叫你注册,先说我获取注册码,再破弹窗

当前目录没有可以的ini文件什么的,

QQ20160607135408

一开始查找注册关键字,因为那时注册码已经判断完毕,但知道它用的是注册表来储存的,下面的红字忽略,因为我犯错误了,有错也挺好的QQ20160607135616

程序上方有个未购买,这个是先读取注册表判断完后在显示出来的,所以查找未购买,之前肯定是判断注册表的了

QQ20160607140756

向上查找,看着有个注册表的路径字符,下断

QQ20160607140833

重新载入,断下来,f8几步就可以看到注册码了

QQ20160607140928

注册成功

QQ20160607141102QQ20160607141146

去注册表看看,确实是存在这吧,删掉注册码,我们破解弹窗

QQ20160607141411

载入后,f9,关闭,此时程序会弹窗,不要点击程序,回到od点击暂停或F12,再看看调用堆栈(k那里),跟过去

QQ20160607141613QQ20160607141645

重新载入,运行后,关闭

QQ20160607141958

返回用户代码,再返回上一层函数即可找到下面的,没实现我们就改成jmp无条件跳转就行

QQ20160607142104

第十三课

打开看看,注册一下

QQ20160607184314

QQ20160607184110

查下壳

QQ20160607184539

作者使用的是搜索字符串,其实很简单的,定位到的代码差不多

下面我用MsgBox 断点吧(vb嘛)

运行,输入注册码,返回用户领空,发现上面有个跳转,是跳到不正确的,跟过去

QQ20160607185435

__vbaVarTstEq 比较变量是否相等,其实下这个断点更快捷吧

QQ20160607185356

把je nop掉就行啦,f9,不过这个要打开每次都要注册,虽然随便输入都能成功,但很烦

QQ20160607185525

由于软件估计有校验,过一会就运行不了,暂时不能让大家看到注册码

QQ20160607204847

第十四课

作者这里主要讲脱壳,还有BC++脱壳后要手动修复IAT

我首先带壳破解一下吧,这个可以带壳找到注册码的

QQ20160607224614

直接载入运行,转到401000查找字符串

QQ20160607234916

跟过去后就,向上走,找到模块(函数)的开头,下个断点,单步f8,慢点你就会发现注册码,有call稍微进去看一层,跟着你会在堆栈中看到可疑字符串,都复制下来,记在记事本上就好,尝试后就最后一个是注册码

QQ20160607235751

脱壳

脱壳的话呢,一看到pushad,肯定esp定律,先f8一下,再hw break [ESP]

QQ20160607224810

f9运行

QQ20160607230039

BC++的OEP就长这样

QQ20160607230719

转存

QQ20160607230847

用importREC修复后运行不了,BC++就是这样,手动修复IAT,我们看到GetModuleHandleA,在该行回车跟过去

QQ20160607231426

跟过来后,向上找到第一个api函数,跟过去内存地址

QQ20160607231543

转换一下显示格式

QQ20160608000433

QQ20160607231627

对比一下importREC自动获取的,地址是错的

QQ20160607231745

修改RVA和大小,显示无效指针删除后再转存哦

QQ20160607233545

脱壳就成功了

第十五课

这次讲的是用DarkDe4去破解上一课的程序,这个可以用于delphi和BC++据说

首先程序先脱壳哦,直接发送到DarkDe4

QQ20160608085714

看看过程那里QQ20160608090827

刚好有三个按钮,事件,双击一下button1

QQ20160608091039

这个肯定是打开网站这个按钮,我们看看其他两个按钮,暂时看不出来,那我们就在od对应的位置下断,两个按钮都要哦

QQ20160608091245

od f9运行,跟着按一下生成机器码,那个断下来就是生成机器码的按钮了

那么另一个就是处理注册码的了,我们稍微f7 f8一下就能找到注册码了

第十六课

这个没有给程序,就说一下过程,就一直用f8看看是那个call之后就弹框的,跟着就f7跟进去,不断跟,最终看到有个跳转跳过了那个call,直接无条件跳转就行了

第十七课

打开看看

QQ20160608094354

查壳

QQ20160608094439

f9运行,注册后暂停,别点确定哦

QQ20160608095046

 

QQ20160608094843

执行到用户代码,才点击对话框

QQ20160608094913

向上一点,找到如下代码,

QQ20160608095046

根据那个push找到上面的关键call,关键jmp

QQ20160608095117

重新载如,跟进那个关键call,单步你就发现注册码

QQ20160608100130

QQ20160608100247QQ20160608100324

第十八课

这节学会用工具制作内存补丁(就是将程序载入内存后,将内存地址的某个地方改了)

打开看看

QQ20160608114848

这次我们从未注册入手

QQ20160608114904

查下壳,没壳

QQ20160608115036

向下多查几个,找到已注册

QQ20160608120004

跟过去之后,向上找了n久,终于找到一个跳过了已注册的跳转,这是一个大跳转

QQ20160608120229

那么我们只做内存补丁将他nop掉,因为他是重启验证的

QQ20160608121119

QQ20160608121057

填写相关信息

QQ20160608121242

生成后直接打开补丁就行了(ko.exe,这是自己命名的)

QQ20160608121305

成功

QQ20160608121317

第十九课

据说这是网络验证的程序,而且是易语言写的

打开看看,注册试试

QQ20160608131319

查下壳,好像没加壳,但好像有,但载入od没提示,应该没有吧

QQ20160608131645

易语言的话,直接载入f9后转到401000搜索二进制串,跟着上面的那个push就是作者说得易语言体(就是易语言的特征吧),那个push的是窗口的资源

QQ20160608132026

跟着用另一个od载入同一个程序,也是转到上面的位置,再搜索push 100001命令

QQ20160608132604

跟着就可以找到其他窗体的地址

QQ20160608132711

跟着再改掉一开始那个push

QQ20160608132811

再保存,最终会得到很多东西,但有些是不能运行的,可以看到有好几个绕过了登陆界面的窗体出现了,这也是一种破解思路吧

QQ20160608135046

第二十课

这个是找上一个程序的“暗桩”的,就是一些隐藏功能什么的,

我们发现push 0x52010001那个窗体,会直接退出

那我们看看是不是有个判断是它退出了,以至于破解人员不能直接运行这个窗体,先设置API断点,就是ExitProcess API

QQ20160608195447

QQ20160608195511

f9运行后停下来,这是栈顶的是ExitProcess的下一条指令的地址,而再上一个返回地址(就是红色框住那个)就是调用ExitProcess的函数的下一条指令的地址

QQ20160608195711

跟过去我们可以看到,有个跳转可以跳过那个call

QQ20160608200208

直接改成无条件跳转后保存成success.exe,这个随便命名啦

QQ20160608200226

打开后以为不行

QQ20160608200335

哈哈,原来是可以的啊

QQ20160608200355

第二十一课

这也是一个网络验证程序,直接本地破解也可以,只不过每次打开都要注册一下而已

打开看看

QQ20160608201302

查壳

QQ20160608201339

既然是delphi,那就用DarkDe4看看

QQ20160608201500

找到了各个按钮响应时间的虚拟地址

QQ20160608202000

QQ20160608202037

载入od,跟过去开始激活那个RVA,并下断点

QQ20160608202211

输入后点击激活,暂停下来,单步

QQ20160608202438

一直f8,发现有个call过不去,那么下断f7进去

QQ20160608202541

进去后,下面可以看到一写加密的字符串,应该是对名字和验证码加密传输到服务器

QQ20160608202751

QQ20160608202813

还可以看到请求服务器的地址,跟着一直f8,就弹窗说错误的用户名或密码了,所以F8过不去的call就是网络验证的关键call,所以nop掉,继续向下

QQ20160608202900

发现一个大的跳转,也直接nop掉看看,在f9,不是的话再改回来

QQ20160608203338

f9,发现判断正确

QQ20160608203402

保存后运行,随便输入账户密码就激活,就可以进入软件了

QQ20160608203500

第二十二课

这个破解我又有了自己的思路,当然也是作者的之前类似的方法,

还有这个程序我的电脑缺少了一个dll,从网上下载放到system32就行了

打开看看

QQ20160608215451

好像直接搜索字符不行,也是没加壳的

QQ20160608215601

我的方法

先说说我的方法吧,在弹出注册码不对的时候,将程序暂停,跟着执行到用户代码,点击对话框的确认,跟着往上找,找到函数开头的地方,下个断点,如下图

QQ20160608220235

f9,再点注册,跟着在栈顶点击在汇编窗口跟随,就到了call指令的下一个指令了,而且我们又找到一个跳过这个call的东西,看下面好像是访问购买网站,看到一个链接了吧,先跟过去吧

QQ20160608220255

发现这里已经标注出switch,在第一个那里下断点,改成jmp的话是打开购买网页

QQ20160608220322

改回来,发现下一个je跳了,那我直接将第二个je和dec eax nop掉了,就行了

QQ20160608235513

保存到文件就可以了,不过每次都要点注册

作者的做法

先用脚本下断点,脚本在作者的破解包有,论坛的破解包

QQ20160608221348

选择脚本

QQ20160608225655

我们看到已经设置断点完毕了

QQ20160608225711

到断点那看看,确实很多

QQ20160608230034

f9,暂停后慢慢向下找,找FFFF,据说这个是VB的比较的标志

QQ20160608230106

找到了,下个断点QQ20160608230244

之前的断点全删掉

QQ20160608230423

f9运行,跟着f8单步,发现这个跳转实现,那我们直接nop掉,让你实现

QQ20160608230514

再f9,已经显示已注册了,确认就打开程序了,不过要点击右下角才会弹出程序的窗口

QQ20160608230534

但是关于那里还显示没注册

QQ20160608230954

我们查找一下FFFF那个命令

QQ20160608231157

就是下图的这个

QQ20160608231226

右键下断点

QQ20160608231241

f9运行,知道程序运行起来,当点击关于暂停了就是这里了,发现其下面的跳转实现了,直接nop掉

QQ20160608231602

再f9,哈哈,成功

QQ20160608231617

第二十三课

由于程序好像运行不了,没法调试破解了,这里也回顾一下作者的破解过程

QQ20160609145815

查壳,vb没壳,载入od,f9直接就退出了,跟着查找所有模块间的调用,

QQ20160609150047

跟着按按目标文件排序,按pagedown找到vbaEnd,全下断点,f9,跟着在断点前会看到一些跳不过vbaEnd的,把对应的跳转都改为无条件跳转就行了

QQ20160609150220

还有这个程序会关机倒计时,就是执行了shutdown命令,其实他是在当前目录生成一个脚本,跟着我们可以查找字符串,就是那个脚本文件名的名字,跟过去,直接把那个命令置为0,这是一种。

还有就是可以直接不让它生成那个脚本文件

不能实践,只能这样了

第二十四课

这一课呢,学习的是修改程序中的字符串,用PE explorer

首先打开看看

QQ20160609151036

查壳没壳

QQ20160609151053

用PE explorer打开,跟着点击资源编辑按钮

QQ20160609151137

跟着就开始随意修改了,哈哈

QQ20160609152336

我在修改,不断修改

QQ20160609152413

最好保存

QQ20160609152615

可以看到简直是………

QQ20160609152740

第二十五课

最好一课室教你修改od的,不过只说修改标题,不过经过上一节,我们还可以修改图标啊什么的哦

首先直接拖进16进制编辑器,这里用UltraEdit

QQ20160609153553

查找字符串,

QQ20160609153721

继续查啊查,具体看下图红字

QQ20160609154611

我们看看,哈哈,确实是啊

QQ20160609155234

在利用我们上节课使用的PE explorer看看,可以改的东西还是很多的啊,改那个C的图标

QQ20160609155614

改菜单栏,不过这里应该只能改标题,不过可以汉化了,哈哈

QQ20160609155641

版本号也可以改啊~

QQ20160609155721

好了先到这了,有时间总结一下这里学到的破解的各种思路和方法

打赏作者
喜欢本博客,打赏让博客永久运行,多少你说了算

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

shark恒第一期教程学习记录》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注