XX订票助手(去除强制升级)〖利用Debugger内存破解方法〗
本帖最后由 ubuntu 于 2019-6-6 18:26 编辑最近给网友破解某抢票软件时的思路给大家分享下。
有些壳我们试过好多方法实在是脱不掉的时候,只能想其它方法了。对,就是修改运行时的内存,当然,前提是你找到了了需要修改的内存断点或地址,
但有大多数软件每次打开时或更新后的地址都不一样,这时,我们可以在破解补丁中加入Debugger 能过脚本或其它编程语言控制Debugger动态破解。
好了,拿个列子给大家上菜。(大家熟悉的某订票肋手)
打开它后发现,嗯,程序能用的程序的界面和登陆框都出来了,这时,我们只要把登陆框去掉就行了,怎么去,我们把它丢进OD.在弹出窗体的时候设置断到.
丢进OD.
输入 ShowWindow
这个是主界面,我们要的是登陆窗口,按F9下一个断点
到这里,我们可以看到,这个是登陆的界面。我们只需要把这个窗体的hWnd改掉它就出不来了。
对着 hWnd=006A0DCC 右键--修改 随便输入一个8位数字符就可以了。
F9
这时还没结束,登陆窗口是去掉了,可是主窗口是假死状态。其是它只是实登陆窗口给当在后面了,变成未激活状态。我们打开SpyLite
拖到程序窗口上面,点消息-把窗口可用 勾上就可以了,然后选窗口可用就可以脱离OD了。
可是我们发补丁出去的时候不可能这样发出去吧,有什么办法可以它自动像脚本一样控制修改呢。这时可以用小巧 的Debugger 命令行操作
更多的命令行使用方法,请问度娘。
找到 Debugger 安装目录 的 cdb.exe ,把要破的程序拖到它上面运行输入bu ShowWindow 回车
然后输入 G 回车
上面我们知道第一次回是主界面的 hWnd
断续 输入 G 回车,直到主界面出来,登陆界面没出来为此。
到这里,esp= 这就是这们要改的 窗体hWnd 所在断点。
输入ed (esp+8) 0xffffffff 回车
输入 G 回车
输入 QD 回车 (即可脱离 cdb.exe 面程序不会退出)
到这里就可以了,这时候主窗口也是假死状态。像OD最后一步的时候用 SpyLite把窗体激活就可以了。
这时候我们只要把上面步骤的用编程语言脚本写出来就可以了。 简单的有VBS呀,按键精灵呀。E 等等。
到这里,我把我写的C# 破解的主要源码给大家参考。
if (e.Data.IndexOf("LdrInitShimEngineDynamic") >= 0 || e.Data.IndexOf("int 3") >= 0)
{
this.Invoke(ReadStdOutput, new object[] { "正在设置断点...\r\n" });
Process p = sender as Process;
p.StandardInput.WriteLine("bu ShowWindow");
}
if (e.Data.IndexOf("Unable to verify checksum for") >= 0)
{
this.Invoke(ReadStdOutput, new object[] { "正在调试断点......\r\n" });
Process p = sender as Process;
p.StandardInput.WriteLine("G");
}
if (e.Data.IndexOf("ds:002b:00000000=") >= 0 || e.Data.IndexOf("00000000=????????") >= 0)
{
this.Invoke(ReadStdOutput, new object[] { "正在调试断点.........\r\n" });
Process p = sender as Process;
p.StandardInput.WriteLine("G");
}
//esp=
if (e.Data.IndexOf("esp=") >= 0)
{
//Espstr
Espstr = e.Data;
}
if (e.Data.IndexOf("USER32!ShowWindow:") >= 0)
{
Process p = sender as Process;
if (Gi == 1)
{
this.Invoke(ReadStdOutput, new object[] { "正在修改内存............\r\n" });
string Hexdate = Espstr.Substring(Espstr.IndexOf("esp=") + 4, 8);
p.StandardInput.WriteLine("ed (esp+8) 0xffffffff");
IntPtr Winhwnd = FindWindow(null, "友科订票助手 V2.575");
if (Winhwnd == IntPtr.Zero)
{
p.StandardInput.WriteLine("Q");
this.Invoke(ReadStdOutput, new object[] { "破解失败。。。无法破解此版本!!!\r\n" });
MessageBox.Show("无法破解此版本!!!");
}
else
{
p.StandardInput.WriteLine("QD");
}
Gi++;
}
else
{
if (Gi < 2)
{
this.Invoke(ReadStdOutput, new object[] { "正在调试断点............\r\n" });
p.StandardInput.WriteLine("G");
Gi++;
}
}
资源:
需要工具 爱盘有的下 ,
实例中破解的软件地址 http://www.yk12306.com/Download (2.574之后版本作者加入了 检测不到帐号登陆就退出。大家需要用的 下载 2.574的就可以了。关于升级窗口。直接用这个方法干掉)
破解补丁 (2019/01/16更新,去除强制升级)
链接:https://pan.baidu.com/s/15oVp5VhaUa_LmvBylUI5Rg
提取码:wy1d
实例中破解的软件链接:https://pan.baidu.com/s/1AKf81ltwR0iZ7fYyRdQ9eA
提取码:0qzp
CDN 下载
2019/1/15 CDN已补上,地址已更新 链接:https://pan.baidu.com/s/1AKf81ltwR0iZ7fYyRdQ9eA
提取码:0qzp
CDN 下载
cdn.txt (15.96 KB, 下载次数: 0)
2019/1/15 CDN已补上,地址已更新 为啥CDN节点数量一直是0? 彡彡九 发表于 2019-1-14 16:27
2.574哪里有下
链接: https://pan.baidu.com/s/1D3wawusQgx7WrLQqwJVqvw 提取码: 352j 请问楼主大大,CDN怎么导入呢 学习一下逆向的教程,看看能不能实验 学习一下新知识 刚需 使用中{:1_927:} 谢谢,不过这软件是不是交易过才能注册,要交易流水号 有了这个,妈妈再也不用担心我没有车票回家了
2.574下载不到了 只有2.575 已经更新了 看上去很复杂的样子。