[破文]MyPTC 破解+内存补丁
引言:前几天网友叫我破这个软件,之前也碰过这个,不过都浅尝辄止,那天刚好是把SuperClick1.57破了,很有股冲劲,想把这个搞定,于是苦战两天终于告捷!破解后精力几乎耗尽,不过有幸见识软件狡猾的伎俩,收获还是颇多。本来网友叫我做补丁来卖钱,我也考虑了一阵子,最终我不想沦为破解界的垃圾(破了软件拿来卖钱,还没有这样搞过呢!),凭着网络知识共享的原则,我公布破文。由此引发一系列后果,与我无关!希望软件作者早些升级。本来不想公布,但是我越保留就说明我所存的东西越少,也就是说明没有进步,所以我要记录在这里,毫无保留!
不过真要写起破文,感觉有点无从下手,一是写破文的经验少,二是对这个软件不知从哪儿说起,还是略略论述然后张贴一些记录吧。
程序启动,解密部分字符,对字符下断点很容易找到解密字符的程序段,不过这还不是主要的,加密的字符如:"MyPTCForm","TMyPTC","MyPTC.ini","正在登录","正在登陆","update.exe","登陆成功"……主要防止很轻易的找到重要字符下断点。
登录发送的数据好像是:用户ID,程序名+版本号,以及一些特别的数字。
程序启动的时候读取了8个地址,不知道干什么,原本以为是发送给服务器的,但是后拉发现并没有多大作用。算是程序比较多余的一处,代码如下:
005BBD0C .A1 08A55C00 mov eax,dword ptr ds:
005BBD11 .8B80 74040000 mov eax,dword ptr ds:
005BBD17 .33D2 xor edx,edx
005BBD19 .E8 82EBFBFF call dumped_.0057A8A0
005BBD1E .85C0 test eax,eax
005BBD20 .7E 48 jle short dumped_.005BBD6A
005BBD22 .8D8D 4CFFFFFF lea ecx,dword ptr ss:
005BBD28 .A1 08A55C00 mov eax,dword ptr ds:
005BBD2D .8B80 74040000 mov eax,dword ptr ds:
005BBD33 .BA E8CA5B00 mov edx,dumped_.005BCAE8 ;ASCII "website"
后面7个都是带"website"的。
登录成功后才开始读取8个网址,并显示在列表中,代码片段:
005BAD38|.8B45 FC mov eax,
005BAD3B|.8B80 74040000 mov eax,dword ptr ds:
005BAD41|.33D2 xor edx,edx
005BAD43|.E8 58FBFBFF call dumped_1.0057A8A0
005BAD48|.85C0 test eax,eax
005BAD4A|.7E 35 jle short dumped_1.005BAD81
005BAD4C|.8D4D F4 lea ecx,
005BAD4F|.8B45 FC mov eax,
005BAD52|.8B80 74040000 mov eax,dword ptr ds:
005BAD58|.BA 8CB45B00 mov edx,dumped_1.005BB48C ;ASCII "sitetype"
005BAD5D|.E8 86F5FBFF call dumped_1.0057A2E8
005BAD62|.33D2 xor edx,edx
005BAD64|.8B45 F4 mov eax,
005BAD67|.E8 ECEDE4FF call dumped_1.00409B58
005BAD6C|.8B55 FC mov edx,
005BAD6F|.FF8482 78040000 inc dword ptr ds:
005BAD76|.55 push ebp
005BAD77|.8BD0 mov edx,eax
005BAD79|.33C0 xor eax,eax
005BAD7B|.E8 40F7FFFF call dumped_1.005BA4C0 ;加载网址!
005BAD80|.59 pop ecx ;0012FDE8
后面有7个都是带"sitetype"字符的程序段,很明显是读取8个网址。这段程序的功能完全可以模拟,后面破解的时候就是patch了的。
登录成功后,根据服务器返回的一些数据运算得出8个网址的加密网址,以及间隔符。举例如下:
01187E7C"104116116112058047047119119119046097045099108105099107115104097114105110103045116101097109046099111109036104116116112058047047119119119046098101108103105117109109111110101121046105110102111036104116116112058047047119119119046098105108108"...//加密的网址
01187E780121A904ASCII "050036042048038094051057050033055" //分隔符,用于后面判断网址是否在前8个当中的时候用。加密的代码好像在程序中就有,而且加密不是很难,每3个数字对应一个字符如"104116116112"就是http (crack essay by lynn on lynn百度空间)
这段加密数字用于判断前面读取的8个网址是否在前面8个中。有一段判断的代码片段:
005AC8BF E8 CC4BF4FF call crack_pr.004F1490 ; 取8个网址,每个网址加间隔符间隔
005AC8C4 8D55 F0 lea edx,dword ptr ss:
005AC8C7 8BC7 mov eax,edi
005AC8C9 E8 EEFAFFFF call crack_pr.005AC3BC
005AC8CE 8D45 E8 lea eax,dword ptr ss:
005AC8D1 50 push eax
005AC8D2 B9 01000000 mov ecx,1
005AC8D7 BA 01000000 mov edx,1
005AC8DC 8B45 F0 mov eax,dword ptr ss:
005AC8DF E8 F485E5FF call crack_pr.00404ED8
005AC8E4 8B45 E8 mov eax,dword ptr ss:
005AC8E7 E8 30D2E5FF call crack_pr.00409B1C
005AC8EC 8BF0 mov esi,eax
005AC8EE 8D45 EC lea eax,dword ptr ss:
005AC8F1 8B55 F0 mov edx,dword ptr ss:
005AC8F4 8A1432 mov dl,byte ptr ds:
005AC8F7 E8 A482E5FF call crack_pr.00404BA0
005AC8FC 8D45 E0 lea eax,dword ptr ss:
005AC8FF 8B4D EC mov ecx,dword ptr ss:
005AC902 8B55 F8 mov edx,dword ptr ss:
005AC905 E8 BA83E5FF call crack_pr.00404CC4 ; 网址后加间隔符,看是不是在8个网址中!
005AC90A 8B55 E0 mov edx,dword ptr ss: ;edx为当前网址
005AC90D 8D4D E4 lea ecx,dword ptr ss:
005AC910 8B45 F4 mov eax,dword ptr ss: ;eax为8网址
005AC913 E8 604AF4FF call crack_pr.004F1378 ; 判断是不是在8个网址中
005AC918 8B55 E4 mov edx,dword ptr ss:
005AC91B 8D45 F8 lea eax,dword ptr ss:
005AC91E E8 2D81E5FF call crack_pr.00404A50
005AC923 B9 01000000 mov ecx,1
005AC928 8B55 F8 mov edx,dword ptr ss:
005AC92B 8B45 EC mov eax,dword ptr ss:
005AC92E E8 7149F4FF call crack_pr.004F12A4
005AC933 8BF0 mov esi,eax
005AC935 8D87 08010000 lea eax,dword ptr ds:
005AC93B 50 push eax
005AC93C 8BCE mov ecx,esi
005AC93E 49 dec ecx
005AC93F BA 01000000 mov edx,1
005AC944 8B45 F8 mov eax,dword ptr ss:
005AC947 E8 8C85E5FF call crack_pr.00404ED8
005AC94C 8B87 08010000 mov eax,dword ptr ds: ;
005AC952 E8 2183E5FF call crack_pr.00404C78
005AC957 83F8 0A cmp eax,0A
005AC95A 7D 1B jge short crack_pr.005AC977 ; 前8个跳过这个!
005AC95C 8D55 DC lea edx,dword ptr ss:
005AC95F B8 34CB5A00 mov eax,crack_pr.005ACB34 ; ASCII "O*?@OvOv?,O9On?@OY?f?r?vOvO@OvOv?9??OvOv?9?*?@O.?.O@O,OvO.O,O.O#OvO.?.O@On?@?#[email protected]#?MO#O.O#OA"
005AC964 E8 FB6BF4FF call crack_pr.004F3564 ; 解密上面这个字符串为http://www.clixncash.com
005AC969 8B55 DC mov edx,dword ptr ss:
挺有意思的就是前面如果我们patch了加载8个网址的地方(含"sitetype"那段),那么列表将显示所有网址,但是当你点击前8个以后的"GO"的时候,这段代码就起作用了,他偷偷将点击那栏的网址改为"http://www.clixncash.com"作为打开网页的数据,比如:(crackessay by lynn on lynn百度空间)
01248D2C01248BDCASCII "http://www.clixncash.com"//这里偷偷修改了
01248D3001248BACASCII "jemmy8288"
01248D3401248BC4ASCII "123456987"
01248D3801248B90ASCII "jamminclicks"
01248D3C01250148ASCII "Logined"
好了,主要的两段代码已经分析了,其余的就是根据你点击的列表行数,如果超过8就错误,有下面这些段:
005ACDAD 83B8 00010000 08 cmp dword ptr ds:,8 ; 就是这个看你点击的行数是否超过8
005ACDB4 7E 1D jle short dumped_.005ACDD3
005ACDB6 8B45 FC mov eax,dword ptr ss:
005ACDB9 8B90 B0000000 mov edx,dword ptr ds:
005ACDBF 8B45 FC mov eax,dword ptr ss:
005ACDC2 8B80 F8000000 mov eax,dword ptr ds:
005ACDC8 8B80 2C010000 mov eax,dword ptr ds:
005ACDCE E8 A532FCFF call dumped_.00570078
005ACDD3 8B45 FC mov eax,dword ptr ss:
005ACDD6 83B8 00010000 08 cmp dword ptr ds:,8 ;这里!
005ACDDD 7E 29 jle short dumped_.005ACE08
005ACDDF 8B45 FC mov eax,dword ptr ss:
005ACDE2 8B80 B4000000 mov eax,dword ptr ds:
005ACDE8 BA 50000000 mov edx,50
005ACDED E8 66CDE5FF call dumped_.00409B58
005ACDF2 8BD0 mov edx,eax
005ACDF4 8B45 FC mov eax,dword ptr ss:
005ACDF7 8B80 F8000000 mov eax,dword ptr ds:
005ACDFD 8B80 2C010000 mov eax,dword ptr ds:
005ACE03 E8 5032FCFF call dumped_.00570058
005ACE08 8B45 FC mov eax,dword ptr ss:
005ACE0B 83B8 00010000 08 cmp dword ptr ds:,8 ;这里!
005ACE12 7E 20 jle short dumped_.005ACE34
005ACE14 8B45 FC mov eax,dword ptr ss:
005ACE17 8B80 F8000000 mov eax,dword ptr ds:
005ACE1D 8B80 2C010000 mov eax,dword ptr ds:
005ACE23 83C0 14 add eax,14
005ACE26 8B55 FC mov edx,dword ptr ss:
005ACE29 8B92 B8000000 mov edx,dword ptr ds:
005ACE2F E8 D87BE5FF call dumped_.00404A0C
005ACE34 8B45 FC mov eax,dword ptr ss:
005ACE37 83B8 00010000 08 cmp dword ptr ds:,8 ;这里!
005ACE3E 7E 20 jle short dumped_.005ACE60
005ACE40 8B45 FC mov eax,dword ptr ss:
005ACE43 8B80 F8000000 mov eax,dword ptr ds:
005ACE49 8B80 2C010000 mov eax,dword ptr ds:
005ACE4F 83C0 08 add eax,8
005ACE52 8B55 FC mov edx,dword ptr ss:
005ACE55 8B92 BC000000 mov edx,dword ptr ds:
005ACE5B E8 AC7BE5FF call dumped_.00404A0C
那个"X/8"显示代码(其实不修改也没问题): (crack essay by lynn on lynn 百度空间)
005BB17F|.83B8 60040000 08 cmp dword ptr ds:,8
005BB186 7C 0D jl short dumped_.005BB195
005BB188|.8B45 FC mov eax,
005BB18B|.C780 60040000 08000>mov dword ptr ds:,8
005BB195|>8D55 9C lea edx,
另外还有两处破解可以达到多开:
005C1FE6|.3D B7000000 cmp eax,0B7
005C1FEB|.0F84 92000000 je dumped_.005C2083
005C1FF1|.A1 0C6E5C00 mov eax,dword ptr ds:
005C1FF6|.8B00 mov eax,dword ptr ds:
以及:
005AB8EB E8 D0BFE5FF call <jmp.&user32.FindWindowA>
005AB8F0 85C0 test eax,eax
005AB8F2 75 0D jnz short dumped_.005AB901
005AB8F4 8D45 FC lea eax,dword ptr ss:
005AB8F7 8B55 F8 mov edx,dword ptr ss:
另外还有几处,是别人不知怎么得出的——那个人破了软件拿来卖钱,我不想说什么。代码如下:
005B3934 8B55 D8 mov edx,dword ptr ss:
005B3937 8D4D DC lea ecx,dword ptr ss:
005B393A 8B45 E8 mov eax,dword ptr ss:
005B6925 8B55 E8 mov edx,dword ptr ss:
005B6928 8D4D EC lea ecx,dword ptr ss:
005B692B 8B45 F8 mov eax,dword ptr ss:
005B83A5|.8B55 E8 mov edx,
005B83A8|.8D4D EC lea ecx,
005B83AB|.8B45 F8 mov eax,
005B9905|.8B55 E8 mov edx,
005B9908|.8D4D EC lea ecx,
005B990B|.8B45 F8 mov eax,
其实不修改这些代码也都破解成功了,我觉得有点多余,后面还是一并修改了。
(crack essay by lynn on lynn's百度空间)
另外也修改了"体验版"字符为正式版,但请用我给的版本才能生效。
好了,以上代码都是原始代码,下面开始patch!
——到这里你可能是还不知道我在说什么,呵呵,可能是这样的,如果你没有跟过程序的话:)
就简单张贴我的内存补丁编写记录吧:
patch1:
005BAD41
0x8B ,0x15 ,0xEF ,0x4B ,0x66 ,0x00 ,0xE8 ,0x54 ,0xFB ,0xFB ,0xFF ,0x85 ,0xC0 ,0x7E ,0x41 ,0x8D ,0x4D ,0xF4 ,0x8B ,0x45 ,0xFC ,0x8B ,0x80 ,0x74 ,0x04 ,0x00 ,0x00 ,0xBA ,0x8C ,0xB4 ,0x5B ,0x00 ,0xE8 ,0x82 ,0xF5 ,0xFB ,0xFF ,0x33 ,0xD2 ,0x8B ,0x45 ,0xF4 ,0xE8 ,0xE8 ,0xED ,0xE4 ,0xFF ,0x8B ,0x55 ,0xFC ,0xFF ,0x84 ,0x82 ,0x78 ,0x04 ,0x00 ,0x00 ,0x55 ,0x8B ,0xD0 ,0xA1 ,0xEF ,0x4B ,0x66 ,0x00 ,0x40 ,0xA3 ,0xEF ,0x4B ,0x66 ,0x00 ,0x48 ,0xE8 ,0x32 ,0xF7 ,0xFF ,0xFF ,0x59 ,0xEB ,0xA7 ,0xE9 ,0x14 ,0x02 ,0x00 ,0x00
005BAD95
共85个
patch2://多开爆破点1
005C1FEB
0x90, 0x90, 0x90, 0x90, 0x90, 0x90
6个
patch3://判断网址是否在8个中
005AC912
0xE0
1个
patch4://此处为我的补丁区别于那个人的不同处
005ACDB4,005ACDDD,005ACE12,005ACE3E
0xEB
patch5://"0/8"的8的修改
005BB186
0xEB//可以共用patch4的!
patch6://多开爆破点2
005AB8F2
0x90,0x90
patch7://类似patch3
005B692D,005B990D,005B83AD
0xE8
patch8://类似7
005B393C
0xD8
那个补丁最后一处:575920,我没改,那个好像有问题,另外它有三处跟我不同。那个地方也正是他破解代理没有修改的地方,不过估计我的patch4修正了他的问题,所以我的补丁可能是全能的!
patch9://资源修改,dephi资源的字符居然是unicode的!
00633984
0x63, 0x6B, 0x0F, 0x5F
4个字节(正式)
另赋SDK补丁源码——是不是做得太绝了了,呵呵!没关系,我说了要毫无保留的!这样才达到交流学习的目的。
#include <windows.h>
void MessBox(char* mess)
{
const char *caption = "信息提示";
MessageBox(NULL, mess, caption, MB_OK|MB_ICONERROR);
return;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
//修改字节
BYTE patch1[] = { 0x8B ,0x15 ,0xEF ,0x4B ,0x66 ,0x00 ,0xE8 ,0x54 ,0xFB ,0xFB ,0xFF ,0x85 ,0xC0 ,0x7E ,0x41 ,0x8D ,0x4D ,0xF4 ,0x8B ,0x45 ,0xFC ,0x8B ,0x80 ,0x74 ,0x04 ,0x00 ,0x00 ,0xBA ,0x8C ,0xB4 ,0x5B ,0x00 ,0xE8 ,0x82 ,0xF5 ,0xFB ,0xFF ,0x33 ,0xD2 ,0x8B ,0x45 ,0xF4 ,0xE8 ,0xE8 ,0xED ,0xE4 ,0xFF ,0x8B ,0x55 ,0xFC ,0xFF ,0x84 ,0x82 ,0x78 ,0x04 ,0x00 ,0x00 ,0x55 ,0x8B ,0xD0 ,0xA1 ,0xEF ,0x4B ,0x66 ,0x00 ,0x40 ,0xA3 ,0xEF ,0x4B ,0x66 ,0x00 ,0x48 ,0xE8 ,0x32 ,0xF7 ,0xFF ,0xFF ,0x59 ,0xEB ,0xA7 ,0xE9 ,0x14 ,0x02 ,0x00 ,0x00};
BYTE patch2[] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90};
BYTE patch3[] = { 0xE0 };
BYTE patch4[] = { 0xEB };
BYTE patch5[] = { 0x90,0x90 };
BYTE patch6[] = { 0xE8 };
BYTE patch7[] = { 0xD8 };
BYTE patch8[] = { 0x63, 0x6B, 0x0F, 0x5F };
DWORD Buffer; //判断解压完毕
const char *fname = "MyPTC.exe";
char *err1 = "不能创建进程!";
char *err2 = "不能读取进程内存!";
char *err3 = "字节不符!";
char *err4 = "不能写入内存!";
char *msOK = "补丁成功!";
ZeroMemory(&si, sizeof(si));
si.cb=sizeof(si);
if ( CreateProcess(fname,NULL,NULL,NULL,FALSE,/*CREATE_SUSPENDED*/NORMAL_PRIORITY_CLASS, NULL,NULL, &si, &pi) )
{
ResumeThread(pi.hThread);
while(ReadProcessMemory(pi.hProcess,(LPCVOID)0x005C1FF6, &Buffer,4,NULL))//特别注意第二个参数!
//DWORD dwUnpack = 0x005C1FF6;然后&dwUnpack是错误的!郁闷半天!参看别人代码很好!
//WriteProcessMemory的第二个参数也是如此!
{
if(Buffer == 0xD7E8008B)
goto unpack;
else
continue;
}
MessBox(err2);
return 0;
unpack:
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005BAD41,&patch1,85,NULL))//path1,破解Grid显示
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005C1FEB,&patch2, 6,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005AC912,&patch3, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005ACDB4,&patch4, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005ACDDD,&patch4, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005ACE12,&patch4, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005ACE3E,&patch4, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005BB186,&patch4, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005AB8F2,&patch5, 2,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005B692D,&patch6, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005B990D,&patch6, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005B83AD,&patch6, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x005B393C,&patch7, 1,NULL))
MessBox(err4);
if(!WriteProcessMemory(pi.hProcess,(LPVOID)0x00633984,&patch8, 4,NULL))
MessBox(err4);
CloseHandle (pi.hProcess);
CloseHandle (pi.hThread);
}
else
MessBox(err1);
return 0;
}
现成补丁请到我的论坛下载:
lynn.lunqun.com 很不错,精神和行动上支持你,还有不知道这 PTC 是什么软件,没用过 (菜鸟啊)
[ 本帖最后由 lgjxj 于 2007-12-27 12:34 编辑 ] 算不上是作弊软件··嗯··PTC广告自动点击软件! 是不是登录网络帐号的程序都会有一些标志性的东西。
例如:从服务器端返回一些数据的。
比如:注册的帐号有些级别区别。
分为付费用户和免费的。免费的自然有些限制。
汇编语言有没有这方面的代码呢。
不好意思,应该自己去查资料。
但,菜鸟么。就在这里问问啦。哈哈 学习楼主的PACH技术 看不懂。。。。。 .一点都不详细..
中等级别都很难看懂.. 请楼主一并发出破解时候使用的软件和补丁好吗?
现在在网上很难找到早一点的软件版本了,另外软件还要自动登录服务器吗? ..这个可以搞起本地验正`就好了。.. 楼主真的是高手啊,我也永远支持你!
页:
[1]
2