Utools逆向
环境:windows10、x64dbg, asar, openssl 版本:utools 6.1.0…
2024/7/4 13:25:02 根据youtube上的实战微信逆向教程,测试环境 win10 版本:3.9.11.16 x86 工具:od 吾爱破解版本、ce 实现微信多开 程序启动时会使用CreateMutex(...)创建互斥体,每次启动时检查是否存在同名的互斥体,存在就不重复打开。 使用od打开微信,先不点继续。搜索CreateMutex函数,下断。点击运行,然后查看堆栈中CreateMutex传入的名称。使用ce手动添加该地址,然后修改里面的内容,取消断点,点击继续运行。在启动一个微信就能实现开两个了。od中对createmutexw断点,向上回溯查看互斥名的来源,定位到一个push wechatwin.xxxx那么这个xxx可能就是地址 计算出该地址的call指令的地址基于wechatwin.dll的偏移3CD 68E0 获取微信登录二维码 google搜索png文件头格式查看。可以使用ue查看png文件头的二进制来查看。 打开微信停留到没有二维码的界面,ce搜索未初始化的值,然后切换到二维码的界面,ce在过滤到改变的值。…
2024/7/5 15:47:10 常说的hook一般指的是inline hook。windows系统的分几个环,inline hook是用的最广泛的在r3中。 目标: 参数:在干嘛 call正常流程代码 我们的代码: 拦截内容 修改内容 还原进来时的代码 原封不动的返回 可以在od中进行测试,比如定位到我们需要拦截指令,对需要重写的那几行指令选中,右键-标签-用nop填充。在空出来的字节中,添加指令jmp到自定义的函数。自定义的函数在jmp回拦截指令后续需要执行的指令。 代码实现 ... 8d4d 0c | lea ecx,dword ptr ss:[ebp+0xc] e8 xxx | call xxx //hook这里 xxxx | xxxx .... 相当于我们要将hook对应的机器码替换调。这里的e8对应的call, e8后面的xxx=要跳转的地址-hook的地址-(这行机器码对应的字节),例如这个的xxx=…
date: 2024/6/21 通过使用process monitor监听clash发现,在点击开启系统代理与关闭系统代理时程序调用了一个名为sysproxy.exe的程序 进一步监听sysproxy.exe,同时查看该程序的process start操作,点击可以查看到调用该程序时传递的参数 #开启时 Command line: sysproxy.exe global 127.0.0.1:7890 "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.…
date: 2024/6/21 使用process monitor监听utools,当执行添加启动项时,会改写相关路径:C:\Users\xiaoyu\AppData\Roaming\uTools\database\default中的文件,查看目录下的文件,将该目录结构提交gpt,发现该目录格式与leveldb数据库操作相关的目录结构相似。 使用.net中的leveldb相关的库对其进行相关操作后,在第1次运行leveldb对该数据库进行修改时可以发现,数据库操作失败,通过调用leveldb的修复代码后,发现能够正常读取写入。 static void RepairDatabase() { var repairOptions = new Options { CreateIfMissing = false }; // 正确的参数顺序 DB.Repair(repairOptions, dbPath); } 通过打印数据库结构后发现,数据库中有一个key-value中包含的"files:[]"字符串,该字符串中包含的启动文件中路径与我在utools界面程序中添…
date: 2024/6/27 常规寄存器介绍 RAX: 累加寄存器,常用于存放函数返回值。 RBX: 基址寄存器,通常用于在需要保持函数调用前后状态不变的情况下存储数据。 RCX: 计数寄存器,通常用作第一个整数参数传递给函数。 RDX: 数据寄存器,通常用作第二个整数参数传递给函数。 RSI: 源索引寄存器,常用于字符串和数组操作,指向源的位置。 RDI: 目的索引寄存器,常用于字符串和数组操作,指向目的的位置。 RBP: 基指针寄存器,用于指向当前函数栈帧的基址。 RSP: 堆栈指针寄存器,指向当前堆栈的顶部,是最重要的寄存器之一,用于追踪函数调用堆栈。 R8 - R9: 用作额外的整数参数传递(第三和第四参数)。 R10 - R11: 通常用于特定的函数调用和系统调用,或者由编译器用作临时寄存器。 R12 - R15: 这些是可供程序自由使用的额外通用寄存器,通常用于在函数调用过程中保持其值不变。 RIP:指向当前或下一个条执行的指令…