小生我怕怕笔记
4 minute read
0x01 破解技巧1<小生我怕怕第2课>小生我怕怕第2课>
右键同时查找文本并复制多个"未注册/注册"关键字附近的汇编代码到文本文件,比较它们,找出关键的与未注册相关的call调用、cmp处的相关比较(快速找出关键call)
0x02 破解技巧2<小生我怕怕第3课>小生我怕怕第3课>
1>se和vm的壳有反调试功能,调试方法:
ctrl+f2后shift+f9
2>各语言入口特征及按钮事件查找方法:
1>>c++
c++字符串查找:ascii
c++按钮事件查找:sub eax,0A
c++入口函数GetVersion
c++的入口
00408027 >/$ 55 push ebp
00408028 |. 8BEC mov ebp,esp
0040802A |. 6A FF push -0x1
0040802C |. 68 F0F14000 push C++.0040F1F0
00408031 |. 68 84AF4000 push C++.0040AF84 ; SE 处理程序安装
00408036 |. 64:A1 00000000 mov eax,dword ptr fs:[0]
0040803C |. 50 push eax
0040803D |. 64:8925 000000>mov dword ptr fs:[0],esp
00408044 |. 83EC 58 sub esp,0x58
00408047 |. 53 push ebx
00408048 |. 56 push esi
00408049 |. 57 push edi ; ntdll.7C930228
0040804A |. 8965 E8 mov [local.6],esp
0040804D |. FF15 E4F04000 call dword ptr ds:[<&KERNEL32.GetVersion>;
2>>delphin
delphin字符串查找:ascii
delphin按钮事件查找:右键-查找-查找二进制字符串:
740E8BD38B83????????FF93????????
ctrl+l键下翻页查找,每个都下断
delphin的入口
0045D408 > $ 55 push ebp
0045D409 . 8BEC mov ebp,esp
0045D40B . 83C4 F0 add esp,-0x10
0045D40E . B8 28D24500 mov eax,DELPHI.0045D228
0045D413 . E8 6088FAFF call DELPHI.00405C78
3>>汇编
汇编字符串查找:ascii
汇编入口函数:GetModuleHandleA
汇编的入口
0040285E >/$ 6A 00 push 0x0 ; /pModule = NULL
00402860 |. E8 970B0000 call <jmp.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
4>>易语言
易语言字符串查找:ascii
易语言按钮事件(查找二进制代码):FF 55 FC 5F 5E
易语言入口函数:GetVersion
停留下后,alt+f9--->查找二进制字符串:
FC DB E3 E8 ?? ?? ?? ??
多数易语言采用花指令对易格式体进行保护,可先采用E junk code处理掉再查找ascii字符串
5>>vc8
vc8字符串查找:unicode
vc8按钮事件查找:sub eax 0A
vc8入口函数:GetStartupInfoW
v8的入口
00403A30 > $ E8 6E270000 call VC8.004061A3
00403A35 .^ E9 79FEFFFF jmp VC8.004038B3
00403A3A /$ 55 push ebp
00403A3B |. 8BEC mov ebp,esp
00403A3D |. 83EC 08 sub esp,0x8
6>>vb
vb字符串查找:unicode
vb 查找字符串时采用二进制字符串816C2404??000000
vb入口特征查找函数:ThunRTMain
注:识别VB P-code编译时,只需要查找不到按钮事件就是P-CODE编译
P-CODE代码是虚拟代码,需要独立的调试器
vb的入口
00401978 .- FF25 18114000 jmp dword ptr ds:[<&MSVBVM60.#613>] ; msvbvm60.rtcVarStrFromVar
0040197E .- FF25 84104000 jmp dword ptr ds:[<&MSVBVM60.__vbaVarTst>; msvbvm60.__vbaVarTstEq
00401984 .- FF25 7C104000 jmp dword ptr ds:[<&MSVBVM60.#528>] ; msvbvm60.rtcUpperCaseVar
0040198A .- FF25 A8104000 jmp dword ptr ds:[<&MSVBVM60.EVENT_SINK_>; msvbvm60.EVENT_SINK_QueryInterface
00401990 .- FF25 78104000 jmp dword ptr ds:[<&MSVBVM60.EVENT_SINK_>; msvbvm60.EVENT_SINK_AddRef
00401996 .- FF25 9C104000 jmp dword ptr ds:[<&MSVBVM60.EVENT_SINK_>; msvbvm60.EVENT_SINK_Release
0040199C $- FF25 08114000 jmp dword ptr ds:[<&MSVBVM60.#100>] ; msvbvm60.ThunRTMain
004019A2 00 db 00
004019A3 00 db 00
004019A4 > $ 68 5C284000 push VB.0040285C ; ASCII "VB5!6&vb6chs.dll"
004019A9 . E8 EEFFFFFF call <jmp.&MSVBVM60.#100>
3>die64
DIE64类似于PEID的功能,但是他强大之处,在于他可以不管是任何壳保护的情况下,都可以识别出他的编写语言
4>vmp
VMP入口,就是看起来很凌乱,就像未解码的代码一样,但是VMP保护分两种代码
乱序
虚拟
VMP在默认保护的情况下是不会保护功能代码的,并且VMP保护功能代码只是一个区段,如果大家看到的.VMP区段有三条的话,就表示此程序已经被VMP进行了最大保护,如果只是一条区段的话,那就是乱序保护,两条区段的话,就是乱序加虚拟保护
5>tmd
TMD2.10以后的版本和WL的版本入口都是一样
00600000 > 83EC 04 sub esp,0x4
00600003 50 push eax
00600004 53 push ebx
00600005 E8 01000000 call 易语言.0060000B
0060000A CC int3
0060000B 58 pop eax ; kernel32.7C817027
0060000C 89C3 mov ebx,eax
0060000E 40 inc eax
6>个人推荐这个保护自己的补丁Private exe Protector
7>SE调试技巧,就是在运行起来之后4-5分钟时在去调试,可以避免少被ANTI到,ANTI所指的是反调试
0x03 破解技巧3<小生我怕怕第4课>小生我怕怕第4课>
1>回溯的方法
(a.并非所有程序的破解都可以用b.该方法可用于没有字符串可以查找的情况)
1>>随意输入用户名+注册码后程序弹出对话框显示注册失败
2>>f12暂停程序
3>>alt+f9执行到用户代码
4>>点击对话框中的确定
5>>在当前程序领空中的eip附近找到jne,je或其他关键跳转进行修改
2>按钮事件下断点的方法
(a.脚本下断点:https://pan.baidu.com/s/1pLAeaL1中的ollyscript脚本b.自己通过破解技巧2中的按钮事件二进制字符串下断)
1>>下按钮事件断点,ab两种方法
2>>随意输入用户名+注册码后点击确定注册,程序中断
3>>在堆栈窗口中往下查找输入的用户名注册码等字符串
4>>在堆栈窗口中3中找到的字符串的上面的最近几处的"返回到..."处右键在汇编窗口中显示,找出关键call
0x04 破解技巧4<小生我怕怕第5课>小生我怕怕第5课>
1>在破解中合适地运用"所有常量"和"所有命令"会使破解轻松很多
2>vb和delphin中的"所有常量"几乎对破解没有帮助
3>vb破解时
1>>右键查找所有模块调用--->在所有rtcMsgBox下断
2>>任意输入用户名和注册码,单击确定注册
3>>排除明显不是关键断点的rtcMsgBox断点
0x05 破解技巧5<小生我怕怕第6课>小生我怕怕第6课>
1>vb多采用0xffff做比较,判断是否是正式版
2>vb破解时,可在__vbaStrCmp的所有调用处下断
0x06 破解技巧6<小生我怕怕第7课>小生我怕怕第7课>
1> bc++的按钮事件和delphin是一样的
2>重启验证必须在程序还未完全初始化时,找到重启后的关键地址,进行破解
3>一般破解的关键跳转(je,jne)处会涉及到eax
4>一般与注册表有关时,RegCloseKey以下为关键验证的地方,结合3找出关键跳转,进行破解
0x07 破解技巧7<小生我怕怕第9课>小生我怕怕第9课>
1>一般破解的关键在eax
2>vb的程序,一般以-1(FFFF)和1进行比较
3>破解采用api下断的方法时,在api上下的断点是针对系统领域下的,需要alt+f9运行到用户代码方可继续进行调试
4>od死码
1>>什么是OD死码?
OD死码指的就是OD反汇编中游戏更新后也不变的汇编.
eg:
8D 3C 24 ??????????????8D 75 08 8B 1E 83 C6 04 51
每两个问号代表一个字节,我们也可以通过问号去代表会改变的数值,也可以通过问号去代表着寄存器换算的数值,只需要前后左右,照顾周全就OK,PUSH 是不会改变的,但是他也会因为PUSH的值不同而有所改变,所以,我们要根据实际的情况
2>>如何设立?
规则:最多8条汇编,因为OD里ctrl+s搜的时候最多只能8条
哪些汇编不能用于OD死码:call 内存地址
jz/jnz/je(等跳转语句) 内存地址
mov eax,[ecx+0abc] 偏移abc比较大的不可以.
mov eax,[esp+30] 汇编里有ESP堆栈寄存器的不可以,后面跟的偏移+30会变化
3>>为什么要设立?
因为游戏更新基址,较大的偏移会变化,为了方便,所以设立OD死码,方便快速获取游戏更新后的相关数据.
0x08 破解技巧8<小生我怕怕第10课>小生我怕怕第10课>
1>一个程序脱壳以后不要直接运行它,要是有校验格盘那么就受伤了,可以查找字符串或在虚拟机中运行
2>易语言窗体事件
004156A5 . 68 02000080 push 0x80000002
004156AA . 6A 00 push 0x0
004156AC . 68 00000000 push 0x0
004156B1 . 6A 00 push 0x0
004156B3 . 6A 00 push 0x0
004156B5 . 6A 00 push 0x0
004156B7 . 68 01000100 push 0x10001
004156BC . FF35 D4744C00 push dword ptr ds:[0x4C74D4]
004156C2 . FF35 D0744C00 push dword ptr ds:[0x4C74D0]
004156C8 . 68 03000000 push 0x3
004156CD . BB D09E4100 mov ebx,六开挤线.00419ED0
004156D2 . E8 87420000 call 六开挤线.0041995E
004156D7 . 83C4 28 add esp,0x28
004156DA . 6A 00 push 0x0
004156DC . 68 02000000 push 0x2
004156E1 . 6A FF push -0x1
004156E3 . 6A 12 push 0x12
004156E5 . 68 E6A90206 push 0x602A9E6
004156EA . 68 7F9F0252 push 0x52029F7F
004156EF . E8 76420000 call 六开挤线.0041996A
004156F4 . 83C4 18 add esp,0x18
004156F7 . 6A 00 push 0x0
004156F9 . 68 00000000 push 0x0
004156FE . 6A FF push -0x1
00415700 . 6A 05 push 0x5
00415702 . 68 E6A90206 push 0x602A9E6
00415707 . 68 7F9F0252 push 0x52029F7F
0041570C . E8 59420000 call 六开挤线.0041996A
00415711 . 83C4 18 add esp,0x18
00415714 . E8 0B79FFFF call 六开挤线.0040D024
00415719 . E8 C594FFFF call 六开挤线.0040EBE3
004156DA . 6A 00 push 0x0
004156DC . 68 02000000 push 0x2
004156E1 . 6A FF push -0x1
004156E3 . 6A 12 push 0x12
004156E5 . 68 E6A90206 push 0x602A9E6
004156EA . 68 7F9F0252 push 0x52029F7F
004156EF . E8 76420000 call 六开挤线.0041996A
004156F4 . 83C4 18 add esp,0x18
这样的代码我们叫他为窗体事件,只要鼓捣过易语言老版本的人都比较清楚
只要能锁定到窗体事件,完全就可以来一个超级大跳转
3>常见网络验证
首先我们按强度排列
第一的当然是
可可验证
绝大多数运用在DNF外挂上面
飘零网络验证
飘零的早期版本,是可以山寨到管理端的
CC网络验证
相对来说,较为简单,但是作者也颇贱,原版CC就带有格盘代码
小烦的网络验证
更为简单,有数据库漏洞
当我们辨别出是那一款比较常见的网络验证之时,可以常试先找一份无壳版的跟一下,然后在套用思路即可
4>易语言的远跳转以及易语言的JE JNZ是非常需要关注的
0x09 破解技巧9<11-19课>
小生我怕怕第11课:
易原体讲解
小生我怕怕第12课:
delphin网络验证
格盘命令:cmd.exe /c del /f /s /q /a c:\*.*
小生我怕怕第13课:
c的网络验证(c++外挂破解)
小生我怕怕第14课:
讲解如何去除和锁定网络验证暗装
当我们破解了程序发现没有功能,那么就是暗装导致的
当我们破解程序突然间关机,那么就是暗装导致的
当我们破解程序突然被格盘,那么就是暗装导致的
当我们破解时,出现暗装那么是系统错误或者内存错误,都有可能,但是也并不是绝对
部分程序他是由各自系统不兼容所导致,所以在选择破解程序时遇见暗装可以给多几个人测试是否正常
小生我怕怕第15课:
剖析网络验证的机制
小生我怕怕第16课:
快速锁定功能项进行爆破,从而达到跳过网络机制
当我们破解程序限制时,可以借助彗星小助手和XT去查找他是否有多窗体,如果有多窗体,我们可以通过这两个工具去穿透第一层验证窗体,去第二层,实施功能爆破
小生我怕怕第17课:
认识本地网络验证的几种方法
本地验证也就是将远程服务器的IP地址转换成127.0.0.1
然后在本地根据服务器端口进行模拟,一个本地的验证端
通常可以本地验证的程序是属于封包固定型态
或者就是你能理解他的算法加密
又或者是你能固定他的加密密钥
还有一种方法的本地验证就是,需要你能弄到验证文件,然后在自己的机器或者服务器上架设
RECV就是接收封包
SEND 就是发送封包
修改HOST型
修改HOST表的方法千万不能运用在ASP型文件验证上,会被检测
好处:简便,任何机器都可以使用
坏处:薄弱,容易被检测
更改IP型
好处:简单,方便,没有什么技术性可言
坏处:路由器,网吧都不可以使用
注:路由器如果想使用此方法,可以使用泡泡鱼虚拟网卡进行修改
网截拦截型
好处:就是简单易用,列子比较多,并且他是全局注入型,可以拦截大部分程序
坏处:被很多程序在启动之时,都会检测我们的C盘是否存在网截的DLL
注:存放于C:\WINDOWS\system32
HOOK型
好处:强大易用,复杂,需要很好的编程基础
坏处:一般人学不会,需要很多时间去学习
免费模块型
好处:没有基础也可以使用,但是相对来说比上面的HOOK型要为简便些
坏处:不是太稳定,因为此模块只是早期的版本,可以使用超级模块5.0进行替换
注:超级模块口碑不是太好,使用时小心
收费模块型
好处:稳定,拦截准趣,有BUG有人修复
坏处:时不时不兼容,部分机器也出现拦截不下的现象
小生我怕怕第18课:
解密网络验证之数据加密
小生我怕怕第19课:
剖析网络验证之绑号风格