当前位置: 首页 > news >正文

二维码生成器联图网站排名优化服务公司

二维码生成器联图,网站排名优化服务公司,公司注销查询系统,jsp做的当当网站的文档最近在研究.net的内存挂。 写了很久的c,发现c#写出来的东西实在太香。 折腾c#外挂已经有很长时间了。都是用socket和c配合。 这个模式其实蛮成功的#xff0c;用rpc调用的方式加上c#的天生await 非常好写逻辑 类似这样 最近想换个口味。注入托管dll到非托管进程 这样做只…最近在研究.net的内存挂。 写了很久的c,发现c#写出来的东西实在太香。 折腾c#外挂已经有很长时间了。都是用socket和c配合。 这个模式其实蛮成功的用rpc调用的方式加上c#的天生await 非常好写逻辑 类似这样 最近想换个口味。注入托管dll到非托管进程 这样做只是为了解决我目前遇见的一个问题。 在一个多线程的程序上逆向我挂了很多钩子导致我读写数据和储存我自己的数据 非常容易出现多线程冲突问题换到.net里以后 lock 和Monitor 在.net里是同线程不互锁。这样能让我不容易出现互锁现象。 有一段时间正在烦恼那些卖驱动的只有读写功能为什么还能实现很多功能。 在我的认知里要调用游戏部分函数才能更方便自己做出更有用的功能 当然这里确实有些外挂是只读取角色顶点就能绘制的。 后来细想一下其实不需要调用功能通过写入代码的方式获取执行就可以了。 就是只要有读写就可以了。 游戏外挂无非就是 读写和调用。 调用是可以通过写来实现。 比如hook某个dx的函数。或者修改虚函数表的地址然后jmp 到自己的函数里 达到获取执行权限。 好比挂钩了GetTickCount  这个API 然后目标游戏不断的调用这个API 我们在这里插入自己的调用逻辑就可以了。 想明白了这个于是我就干起了注入托管dll 到游戏进程里的勾当 当然这个托管dll实在是太大了因为会用Costura.Fody把第三方库都打包在一起 想法是这样注入到游戏进程里以后申请内存空间然后通过asm编译成bytes 然后写入到内存后再去调用他就可以了 这里要安利一个asm的库  GitHub - icedland/iced: Blazing fast and correct x86/x64 disassembler, assembler, decoder, encoder for Rust, .NET, Java, Python, Lua 这个库很香 在c#里写asm长这样子大概就是写好asm以后编译成bytes的过程 然后要介绍在c#内怎么完成thiscall 游戏大部分是thiscall  所以我在内存中申请一段asm 然后通过c#去调用这个段代码就可以了 asm 的作用就是把传入的参数 push到堆栈然后call 之后返回eax 这样就完整的跑通调用了。 用iced把asm生成好然后通过c#的委托去调用这段asm代码即可 最后实现的效果类是这样 至于读写就更简单了。C#自带Marshal可以直接读写。 而且c#也支持不安全指针 直接 *(int*)(0x123456) 100; 然后我们无限的包装自己的读写函数比如byte float int string 之类的读写就可以 至于hook 也可以通过委托回调到自己的c#代码hook在c#完成编译以后写入到目标地址 至此完整的c#外挂需要的功能都实现了。 例子分3个工程 TestApp测试工程模拟调用目标程序比如游戏 InjectionDLL注入DLL负责加载.net的dll如果是远线程注入就注入这个DLL即可例子工程是主动loadlibrary CShareLoadModule c#的主要工作dll 附上源码一份 netInjection.rar //以下是补充 2022 10 09 / 因为上面代码是用asm作为Thiscall 调用的后来发现c#是自带调用约定的可以更优美的实现thiscall 调用 [UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_0(IntPtr ptr);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_1(IntPtr ptr, IntPtr p1);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_2(IntPtr ptr, IntPtr p1, IntPtr p2);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_3(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_4(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_5(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_6(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5, IntPtr p6);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_7(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5, IntPtr p6, IntPtr p7);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_8(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5, IntPtr p6, IntPtr p7, IntPtr p8);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_9(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5, IntPtr p6, IntPtr p7, IntPtr p8, IntPtr p9);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_10(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5, IntPtr p6, IntPtr p7, IntPtr p8, IntPtr p9, IntPtr p10);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_11(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5, IntPtr p6, IntPtr p7, IntPtr p8, IntPtr p9, IntPtr p10, IntPtr p11);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_12(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5, IntPtr p6, IntPtr p7, IntPtr p8, IntPtr p9, IntPtr p10, IntPtr p11, IntPtr p12);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_13(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5, IntPtr p6, IntPtr p7, IntPtr p8, IntPtr p9, IntPtr p10, IntPtr p11, IntPtr p12, IntPtr p13);[UnmanagedFunctionPointer(CallingConvention.ThisCall)]public delegate IntPtr ThisCall_14(IntPtr ptr, IntPtr p1, IntPtr p2, IntPtr p3, IntPtr p4, IntPtr p5, IntPtr p6, IntPtr p7, IntPtr p8, IntPtr p9, IntPtr p10, IntPtr p11, IntPtr p12, IntPtr p13, IntPtr p14);unsafe public static IntPtr ThisCall(IntPtr address, IntPtr dwECX, params object[] args){IntPtr p1  IntPtr.Zero;IntPtr[] paramPtr  new IntPtr[args.Length*2];int addParamCount  0;for (int i  0; i  args.Length; i){var paramtype  args[i].GetType();if (paramtype  typeof(float)){var v  (float)args[i];paramPtr[addParamCount]  *(IntPtr*)v;}else if (paramtype  typeof(double)){var v  (double)args[i];paramPtr[addParamCount]  *(IntPtr*)v;addParamCount;paramPtr[addParamCount]  *(IntPtr*)((v) 4);}else if (paramtype  typeof(long)){var v  (long)args[i];paramPtr[addParamCount]  *(IntPtr*)v;addParamCount;paramPtr[addParamCount]  *(IntPtr*)((v)  4);}else if (paramtype  typeof(IntPtr)){var v  (IntPtr)args[i];paramPtr[addParamCount]  v;}else if (paramtype  typeof(PtrGameUIWindow)){paramPtr[addParamCount]  (args[i] as PtrGameUIWindow).ptr;}else{paramPtr[addParamCount]  (IntPtr)Convert.ToInt32(args[i]);}addParamCount;}Log.Console($ThisCall:0x{address.ToString(X8)} ECX:0x{dwECX.ToString(X8)} {paramPtr.ArrayToString(0, addParamCount)});switch (args.Length){case 0:p1  Marshal.GetDelegateForFunctionPointerThisCall_0(address).Invoke(dwECX);break;case 1:p1  Marshal.GetDelegateForFunctionPointerThisCall_1(address).Invoke(dwECX, paramPtr[0]);break;case 2:p1  Marshal.GetDelegateForFunctionPointerThisCall_2(address).Invoke(dwECX, paramPtr[0], paramPtr[1]);break;case 3:p1  Marshal.GetDelegateForFunctionPointerThisCall_3(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2]);break;case 4:p1  Marshal.GetDelegateForFunctionPointerThisCall_4(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3]);break;case 5:p1  Marshal.GetDelegateForFunctionPointerThisCall_5(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4]);break;case 6:p1  Marshal.GetDelegateForFunctionPointerThisCall_6(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4], paramPtr[5]);break;case 7:p1  Marshal.GetDelegateForFunctionPointerThisCall_7(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4], paramPtr[5], paramPtr[6]);break;case 8:p1  Marshal.GetDelegateForFunctionPointerThisCall_8(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4], paramPtr[5], paramPtr[6], paramPtr[7]);break;case 9:p1  Marshal.GetDelegateForFunctionPointerThisCall_9(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4], paramPtr[5], paramPtr[6], paramPtr[7], paramPtr[8]);break;case 10:p1  Marshal.GetDelegateForFunctionPointerThisCall_10(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4], paramPtr[5], paramPtr[6], paramPtr[7], paramPtr[8], paramPtr[9]);break;case 11:p1  Marshal.GetDelegateForFunctionPointerThisCall_11(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4], paramPtr[5], paramPtr[6], paramPtr[7], paramPtr[8], paramPtr[9], paramPtr[10]);break;case 12:p1  Marshal.GetDelegateForFunctionPointerThisCall_12(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4], paramPtr[5], paramPtr[6], paramPtr[7], paramPtr[8], paramPtr[9], paramPtr[10], paramPtr[11]);break;case 13:p1  Marshal.GetDelegateForFunctionPointerThisCall_13(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4], paramPtr[5], paramPtr[6], paramPtr[7], paramPtr[8], paramPtr[9], paramPtr[10], paramPtr[11], paramPtr[12]);break;case 14:p1  Marshal.GetDelegateForFunctionPointerThisCall_14(address).Invoke(dwECX, paramPtr[0], paramPtr[1], paramPtr[2], paramPtr[3], paramPtr[4], paramPtr[5], paramPtr[6], paramPtr[7], paramPtr[8], paramPtr[9], paramPtr[10], paramPtr[11], paramPtr[12], paramPtr[13]);break;default:Log.Error(new Exception(ThisCall 参数个数未预测));p1  IntPtr.Zero;break;}return p1;} 因为c#会定期GC的问题导致c#自身函数可能会被GC修改函数位置 所以需要固定住代码位置新增一下函数固定Delegate [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet  CharSet.Ansi)]public delegate IntPtr Delegate_NewStringID2String(IntPtr dwESP);public uint LockDelegate(Delegate func){GCHandleList.Add(GCHandle.Alloc(func));GCHandleList.Add(GCHandle.Alloc(Marshal.GetFunctionPointerForDelegate(func), GCHandleType.Pinned));GCHandleList.Add(GCHandle.Alloc(func.Method.MethodHandle.GetFunctionPointer()));return (uint)Marshal.GetFunctionPointerForDelegate(func);}//使用方法public static IntPtr MyStringID2String(IntPtr dwESP){var ret  IntPtr.IntPtr.Zero;return ret;}public override void Start(){var asm  new Assembler(32);asm.pushad();asm.mov(eax, esp);asm.add(eax, 0x20);asm.push(eax);asm.mov(eax, LockDelegate(new Delegate_NewStringID2String(MyStringID2String)));asm.call(eax);asm.mov(__[esp  0x1c], eax);asm.popad();asm.ret();var newJmpCode  PatchSelfHelper.AllocMem(0x30);PatchSelfHelper.WriteAssembler(newJmpCode, asm);}
http://www.hkea.cn/news/14506132/

相关文章:

  • 网站运营工作内容做网站维护挣钱吗
  • 空间怎么上传网站建设公司加盟
  • 网站服务器搭建的步骤常州高端网站建设公司
  • 柳州企业网站开发公司网站建设板块免费下载
  • 美食网站界面设计公司建设网站的好处
  • 建设六马路小学 网站亳州做网站
  • 河南住房和城乡建设部网站海外推广引流
  • 营销广告网站门户网站都有哪些
  • 网站建设对我有什么好处做二手家具回收哪个网站好
  • 旅游网站设计说明书网络服务提供者的下列行为可以免责的是
  • 做备案的网站网上购物网站开发报价
  • 最高法律网站是做啥的网站出现搜索
  • 家居企业网站建设策划中文域名和网站的关系
  • 做全网营销型网站建设直播吧在线直播
  • 个人网站 商城 备案企业做网站的费用如何科目
  • 云谷 网站建设wordpress用户注册邮箱验证码
  • 房地产交易网站如何从网站获取图片做全景图
  • 做英文企业网站全国高速公路施工建设有没有网站
  • 域名抢注网站尚德建设集团网站
  • 做网站收会员费房地产新闻动态
  • 做淘客必须有自己内部网站吗黄页88网能不能发免费的广告
  • 搭建网站咨询广告平面设计软件有哪些
  • 四川城乡与建设厅网站.网站空间
  • 中企动力技术支持网站龙岩做网站开发找哪家
  • 成武县住房和城乡建设厅网站wordpress脚注更改
  • 拱墅网站建设制作做外贸一般在什么网站
  • 黄冈网站推广优化技巧衡水市网站制作
  • 企业网站建设的优缺点小程序低代码开发平台
  • 汽车配件响应式网站查看网站是什么空间
  • 优惠券网站开发做网站需要切图吗