//说明:
EXE和DLL文件是无法使用记事本打开修改的,非文本文档型文件,往往需要使用专用的编辑工具或者十六进制编辑器。

破解软件有破解内存的,也有直接修改程序文件的。后者通常称之为暴力破解。破解的前提是反汇编之后知道怎么改。

本工具只能算是比较简单的数据修改器,把已知的文件修改按分类保存到配置文件,使用时只用选择相应的功能即可破解。

配置文件分为三个配置段:第一层是按数据类型区分的。整数型是十六进制数值,文本是明文字符,其它的都是十进制。

第二层是功能版本分类,可以注明什么程序的哪种版本。第三层是具体功能的实施,选择功能就可以点击【写入】修改程序了。

读取功能是用来检查写入是否成功,或者写入前检查下跟要写入的内容是否一样。一样的话就没必要修改了。

//数据读写.sec
整数 ads,ty,vr,gn,py,dat,分类,配置文件,长度,文件,typ();文本 tmp[24];OPENFILENAME fn;
小程序 窗体消息(整数 句柄,整数 消息,整数 参数,整数 数据);
判断(消息)
为 窗口关闭 {程序退出();}
为 单击左键 {左键点击(参数);}
否则{DefWindowProc(句柄,消息,参数,数据);}
结束;
小程序 窗体启动();
整数 sln;列举 fn{
.lStructSize = 0076;
.nMaxFileTitle = 0064;
.nMaxFile = 0064;
.hwndOwner = 窗体;
.lpstrFilter = "程序文件'\0'.exe'\0'dll文件'\0'.dll'\0'所有文件'\0'.'\0'";
.lpstrDefExt = "exe";
.lpstrTitle = "打开文件";}
配置文件=calloc(34,35);fn.lpstrFile=?+64;typ.Ptr=?+64;typ=?+28;dat=?+34;
typ(1)="整数"; .#4="小数"; .#8="文本"; .#12="浮点"; .#16="字节";
GetModuleFileName(0,配置文件,64);sln=strrchr(配置文件,46);
sln(1)&=$696E69;sln="不转换'\0'转程序'\0'转.dll";
循环(3){SendMessage(转换, CB_ADDSTRING, 0,sln);sln+7;}
选几(0);读取消息();
结束;
小程序 程序退出();
如果(信息框(0,"确定要退出吗?","提示",$24)=IDYES)
{停止(0);}
结束;
小程序 左键点击(整数 参数);
判断(参数)
为 <6{ty=参数;分类=typ(参数);添加选项(分类, 版本);}
为 10{读取数据}为 11{写入数据}
为 $10006{选版本(SendMessage(版本, CB_GETCURSEL,0,0));}
为 $10007{选功能(SendMessage(功能, CB_GETCURSEL,0,0));}
为 $10008{换地址(SendMessage(转换, CB_GETCURSEL,0,0));}
结束;
小程序 读设置(整数 表名,整数 键名,整数 内容);
长度 = GetPrivateProfileString(表名, 键名, 空, 内容, 1000, 配置文件);
结束;
小程序 选几(整数 id);
SendMessage(转换, CB_SETCURSEL, id, 0);
换地址(id);结束;
小程序 添加选项(整数 键名,整数 obj);
整数 sln=dat;读设置(键名,0,sln);
SendMessage(obj, CB_RESETCONTENT, 0,0);
如果(长度>3){
循环{SendMessage(obj, CB_ADDSTRING, 0,sln);
sln+=strlen(sln)+1;}(sln(0)=0)
SendMessage(obj, CB_SETCURSEL, 0, 0);
如果(obj=版本){选版本(0);}
否则{选功能(0);}}
结束;
小程序 选版本(整数 id);
SendMessage(版本, CB_GETLBTEXT,id,tmp);
读设置(分类,tmp,typ);id=转整数(typ) % 3;
选几(id);添加选项(tmp, 功能);
结束;
小程序 选功能(整数 id);
SendMessage(功能, CB_GETLBTEXT,id,dat);
读设置(tmp,dat,typ);拆分式(typ,"%X %s",@ads,dat);
SetWindowText(编辑,dat);
结束;
小程序 换地址(整数 id);
判断(id)
为 1{py=$400000;}
为 2{py=$10000000;}
否则{py=0;}
结束;
小程序 读取数据;
整数 fp,os=ads - py,fl,fv;小数 fs;浮点 db;
GetOpenFileName(fn);
fp = CreateFile(fn.lpstrFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
如果(fp>0){SetFilePointer(fp,os,0,0);
判断(ty)
为 1{ReadFile(fp,@fv,4,@fl,0);格式化(dat,"%X",fv);}
为 2{ReadFile(fp,@fs,4,@fl,0);db=fs;格式化(dat,"%f",db);}
为 3{ReadFile(fp,dat,64,@fl,0);}
为 4{ReadFile(fp,@fd,8,@fl,0);格式化(dat,"%f",fd);}
为 5{fv=0;ReadFile(fp,@fv,1,@fl,0);格式化(dat,"%d",fv);}
SetWindowText(编辑,dat);CloseHandle(fp);}
结束;
小程序 写入数据;
整数 fp,os=ads - py,fl,fv;小数 fs;浮点 db;
GetOpenFileName(fn);
fp = CreateFile(fn.lpstrFile,GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
如果(fp>0){SetFilePointer(fp,os,0,0);memset(dat,0,120);
fv=GetWindowText(编辑,dat,64);
判断(ty)
为 1{拆分式(dat,"%X",@fv);WriteFile(fp,@fv,4,@fl,0);}
为 2{fs=转小数(dat);WriteFile(fp,@fs,4,@fl,0);}
为 3{WriteFile(fp,dat,fv+1,@fl,0);}
为 4{db=转小数(dat);WriteFile(fp,@db,8,@fl,0);}
为 5{fv=转整数(dat);WriteFile(fp,@fv,1,@fl,0);}
CloseHandle(fp);格式化(dat,"写入长度:%d字节",fl);信息框(0,dat,"写入成功",$40);}
结束;

//数据读写.ini
[整数]
江湖2暴破=1

0是文件物理地址,1是EXE内存地址,2是DLL内存地址

[字节]
江湖2.0暴破=1

这里的名字对应一个配置段名称,不同类型不要用相同的段名

[文本]
江湖2.0修改=1
[小数]
江湖5.0编辑=1
[江湖2暴破]
开启穿墙=4BE273 DEE9
关闭穿墙=4BE273 DD840F

前面为16进制地址,空格后面是要修改的十六进制数值

[江湖2.0暴破]
开启瞬移=44BEC0 235
关闭瞬移=44BEC0 116
无限视野=406367 235
有限视野=406367 117

空格后面是要修改的十进制数值

[江湖2.0修改]
江湖小报地址=C2CD30 http://z5x.cn/
[江湖5.0编辑]
称号图标上移=
称号背景左移=
称号背景上移=
称号背景下移=


费先生
1 声望0 粉丝