吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3986|回复: 3
收起左侧

[会员申请] 申请会员ID:UpSir【申请通过】

[复制链接]
吾爱游客  发表于 2020-3-2 13:20
1、申 I DUpSir2、个人邮箱:463264208@qq.com3、原创技术文章:C语言实现植物大战僵尸辅助原理讲解、fps CS方框透视(传统坐标转换、矩阵)、无后座等、C语言实现PE查看器

大家好,我是向上先生,嘿嘿。最近在学习逆向、反汇编等等,首先我在非常感谢52pojie这个平台,差不多很多学习资源都是在这个平台得到的,也学到了非常多的知识,不管申请过不过我都非常感谢;本人技术较菜,希望能够加入该平台和大牛们一起学习,分享自己的一些经验。最近在写加密壳(二进制壳)还没完成~~


一、植物大战僵尸辅助(远程线程注入)主要讲解一个刷僵尸call,其他的功能自行学习,不懂的联评论后解答通过CE和OD分析,通过搜索场上僵尸数量,作为突破口
CE植物1.png
我们来到通过CTRL+G来到41de07这里,首先我们分析一下,刷僵尸这个call应该需要哪些参数,应该会有刷在哪里,刷什么僵尸,也许不会有参数,直接在call里通过代码随机生成等等情况;然后下断点,找到上一层调用的地方,观察堆栈变化根据返回地址找到调用的call od4.png od1.png 由于栈是先进后出,调用关系就是由下往上,我们找的时候就应该由上往下跟随 od2.png od3.png od5.png od6.png 我们将原来的eax==1 esi == 0  改为 eax == 2  esi == 1,后面又来了两次改为eax == 2  esi == 3,得出eax为行数,esi为类型 9.png
接下来就简单了,我们需要edi的值,CE中直接直接搜索edi的值,下访问断点是要保证od必须脱钩,否则不可以。结果edi的值为 [[6a9ec0 ]+ 0x768]
代码讲解:
dll代码:DWORD WINAPI readCount(LPVOIDlParam)是自己dll里创建线程的回调函数,BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) Dll的入口
植物代码.png 植物代码2.png 控制功能代码: 植物代码3.png 植物代码4.png 植物代码5.png 植物代码6.png 植物代码7.png 植物代码8.png
Dll完整代码:(编译后会得到一个TestDll.dll) dll.txt (1.35 KB, 下载次数: 2) 功能控制完整代码: 功能.txt (3.32 KB, 下载次数: 1)
测试代码结果如图: qq.png
大家可以去找找种植call,实现全屏种植
二、fps游戏 CS方框透视原理(矩阵+传统坐标转换)我采用的是GDI窗口绘制,需要干的事就是创建一个窗口,这个窗口透明并且具有穿透效果和置于顶层等特点。然后就是根据敌人和自己坐标点绘制方框。第一种方式:传统型转换坐标原理: 方框讲解图.png CE找自己坐标的基址,我喜欢找z坐标,然后xy坐标就是z坐标地址 -8-4xyz坐标不会东一个西一个,因为在3d游戏中坐标都是通过向量Vector3存储,我们找的很多都是游戏引擎规定好了的东西。就不去找了,自己坐标:CE搜索方法:通过未知的初始值,然后改变了,增加了,减少了,未改变不断过滤自己坐标基址:0x223d24d4Z坐标:+ 0x350X坐标:+ 0x348Y坐标:+ 0x34c 敌人坐标:CE搜索方法:通过自己坐标位置,然后搜索值大于,值小于,改变,未改变,不断过滤。第一个敌人基址:0x223d24e4Z坐标:+ 0x350X坐标:+ 0x348Y坐标:+ 0x34c 鼠标:CE搜索方法:通过移动鼠标,搜索改变了,未改变,不断过滤。鼠标X: 0x20326ec0鼠标Y: 0x20326ebc
代码:由于抽出放方框透视,导致代码有点乱,下次整理后更新传统:
DWORD WINAPI ThreadProc(LPVOID lpParam){        DWORD addr;
        while(F1_Statue)        {                // 读取自己信息                ReadProcessMemory(handle,(void*)(0x223d24d4),&addr,sizeof(DWORD),NULL);                ReadProcessMemory(handle,(void*)(addr+0x348),&selfBody.x,sizeof(DWORD),NULL);                ReadProcessMemory(handle,(void*)(addr+0x34c),&selfBody.y,sizeof(DWORD),NULL);                ReadProcessMemory(handle,(void*)(addr+0x350),&selfBody.z,sizeof(DWORD),NULL);                ReadProcessMemory(handle,(void*)(addr+0x22c),&selfBody.ct,sizeof(DWORD),NULL);                ReadProcessMemory(handle,(void*)(addr+0x9C),&selfBody.hp,sizeof(DWORD),NULL);
                for(int i = 1;i<sum;i++)                {                        // 获取敌人坐标                        ReadProcessMemory(handle,(void*)(0x223d24d4 + i * 0x10),&addr,sizeof(DWORD),NULL);                        ReadProcessMemory(handle,(void*)(addr+0x348),&emBox[i-1].x,sizeof(DWORD),NULL);                        ReadProcessMemory(handle,(void*)(addr+0x34c),&emBox[i-1].y,sizeof(DWORD),NULL);                        ReadProcessMemory(handle,(void*)(addr+0x350),&emBox[i-1].z,sizeof(DWORD),NULL);                        ReadProcessMemory(handle,(void*)(addr+0x22c),&emBox[i-1].ct,sizeof(DWORD),NULL);                        // 血量                        ReadProcessMemory(handle,(void*)(addr+0x9C),&emBox[i-1].hp,sizeof(DWORD),NULL);                        // 计算方框坐标tan(a-b) = [tan(a)-tan(b)]/[1+tan(a)tan(b)]                        ReadProcessMemory(handle,(void*)0x20326ec0,&mousePoint.x,sizeof(DWORD),NULL);                        ReadProcessMemory(handle,(void*)0x20326ebc,&mousePoint.y,sizeof(DWORD),NULL);                        //tan(b)                        //判断象限                        if((emBox[i-1].x - selfBody.x) > 0)                        {                                // 一四象限                                if((emBox[i-1].y - selfBody.y) > 0)                                {                                        // 一 坐标转换代码                                        float tanA = tan((mousePoint.x*3.1415/180.0));                                        float tanB = (emBox[i-1].y - selfBody.y)/(emBox[i-1].x - selfBody.x);                                        emBox[i-1].cx = (box.width/2) + (box.width/2)*((tanA - tanB)/(1+tanA*tanB)) -10;                                        float sqrtX = sqrt((emBox[i-1].x - selfBody.x)*(emBox[i-1].x - selfBody.x) + (emBox[i-1].y - selfBody.y)*(emBox[i-1].y - selfBody.y));                                        tanA = tan((-mousePoint.y*3.1415/180.0));                                        tanB = (emBox[i-1].z - 68 - selfBody.z)/sqrtX;                                        emBox[i-1].cy = (box.height/2) + (box.height/2)*((tanA - tanB)/(1+tanA*tanB)) + 50*tanA;                                        tanB = (emBox[i-1].z - selfBody.z)/sqrtX;                                        emBox[i-1].ch = (box.height/2) + (box.height/2)*((tanA - tanB)/(1+tanA*tanB)) + 50*tanA;                                }                        }                }                                InvalIDAteRect(hwnd,NULL,true);                Sleep(150);        }        return 0;}矩阵:// 线程函数 透视DWORD WINAPI ThreadProc(LPVOID lpParam){        float matrixData[4][4] = {0};        DWORD addr;        while(F1_Statue)        {                int temp = 0;                for(int k = 0;k < 4;k++)                {                        for(int j = 0; j < 4;j++)                        {                                ReadProcessMemory(handle,(void*)(0x2048BC9C + temp * 0x4),&matrixData[k][j],sizeof(DWORD),NULL);                                temp++;                        }                                }                for(int i = 1;i<sum;i++)                {                        // 获取敌人坐标                        ReadProcessMemory(handle,(void*)(0x223d24d4 + i * 0x10),&addr,sizeof(DWORD),NULL);                        ReadProcessMemory(handle,(void*)(addr+0x348),&emBox.x,sizeof(DWORD),NULL);                        ReadProcessMemory(handle,(void*)(addr+0x34c),&emBox.y,sizeof(DWORD),NULL);                        ReadProcessMemory(handle,(void*)(addr+0x350),&emBox.z,sizeof(DWORD),NULL);                        ReadProcessMemory(handle,(void*)(addr+0x22c),&emBox.ct,sizeof(DWORD),NULL);                        // 血量                        ReadProcessMemory(handle,(void*)(addr+0x9C),&emBox.hp,sizeof(DWORD),NULL);                        // 屏幕坐标                        emBox.cz = matrixData[2][0] * emBox.x + matrixData[2][1] * emBox.y + matrixData[2][2] * emBox.z + matrixData[2][3];                        emBox.cz = 1 / emBox.cz;                        // 通过矩阵数据转换为屏幕坐标                        emBox.cx = (box.width/2) + (box.width/2) * emBox.cz * (matrixData[0][0] * emBox.x + matrixData[0][1] * emBox.y + matrixData[0][2] * emBox.z + matrixData[0][3]);                        emBox.cy = (box.height/2) - (box.height/2) * emBox.cz * (matrixData[1][0] * emBox.x + matrixData[1][1] * emBox.y + matrixData[1][2] * emBox.z + matrixData[1][3]);                        emBox.ch = (box.height/2) - (box.height/2) * emBox.cz * (matrixData[1][0] * emBox.x + matrixData[1][1] * emBox.y + matrixData[1][2] * (emBox.z + 68) + matrixData[1][3]);                }                        InvalidateRect(hwnd,NULL,true);                Sleep(150);        }        return 0;}不知道什么原因不能上传,昨天报503,今天报493,直接粘贴代码太多,上传会报错,我就只贴关键部分的代码,剩下的下次一起更 error.png
结果图:传统: 透视1.png 透视2.png
矩阵: 透视3.png 透视4.png
三、PE查看器(这也不更了,下次一起,这次太多了)简单的界面截图 122.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2020-3-3 21:11
I D:UpSir
邮箱:463264208@qq.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。

ps:登录后把文章整理一下发布到软件调试区吧
UpSir 发表于 2020-3-4 00:30
来了,来了。账号已经拿到了,感谢大佬。明天在整理帖子到软件调试区,现在才发现好乱啊
一年又一年 发表于 2020-3-6 15:52
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 07:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表