windows逆向编程
文章平均质量分 57
windows逆向编程,利用windows api和一些工具,CE、OD等实现逆向编程等
诗水人间
要想走的更远,就需要思考更深层次的问题。冷静、智慧、深沉是我所向往的
展开
-
JNI/JNA 中如何从C/C++/C# 转换为java的String,持续更新
在写JNI的过程中,因为调用的是操作系统的api,导致所使用的类型并不是基本类型,windows定义了大类的类型,比如WCAHR啥的,每次调api用到类型就感觉头疼,因为我希望是通过java调用C,那么最终肯定是要转换为java的对象。在写代码的过程中,为了方便做类型转换,我一般都是将字符串相关类型的数据转CString,然后CString转jstring。下面把我遇到的情形都列下来场景一、WCHAR * 转 jstring如:WCHAR* buffer;CString cstr = buffer原创 2022-04-19 00:45:02 · 1673 阅读 · 0 评论 -
JNA实现远程线程注入
首先准备一个dll,为了能看到效果最好是dllMain返回一个对话框或者窗口,可以很明显的看出注入是否成功。下面的WxDemoDll.dll 一个64位的dll主界面如下,如果注入成功会在目标进程起一个线程跑这个对话框,然后在这个dll里面写代码就是代码注入。相当于自己调自己JNA实现注入:package top.yumbo.demo.inter.x64;import com.sun.jna.Memory;import com.sun.jna.Pointer;import com.sun.原创 2022-04-08 20:08:02 · 747 阅读 · 0 评论 -
MFC 基础入门
windows底层 API 是由C语言写的,而MFC则是在此基础上通过C++进行了封装。要想利用MFC进行编程,那么就得从main方法开始MFC的main函数C的写法是温馨小提示:函数变量名如果带有p的一般都是指针,入参的时候的传地址#include <Windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nShowCmd) { // 主程序内容原创 2022-02-06 21:21:48 · 6817 阅读 · 0 评论 -
JNA 中 String 转 Pointer
最近在写JNA的过程中需要将字符串转Pointer对象,原因是jna的api要求传一个Pointer,直接的字符串则不能处理,但发现并不能通过new 得到Pointer对象。但是通过内部的方法可以得知有一些方法似乎就是我们想要的,例如setString方法com.sun.jna.Pointer对象是有setString方法的,但是你会发现我们没法通过new创建一个Pointer对象,也就没法直接用。可以通过import com.sun.jna.Memory;直接在内存中申请一块空间,然后给这块内存空间原创 2022-04-05 05:22:40 · 2888 阅读 · 0 评论 -
JNA 中 GetProcAddress(HMODULE hmodule, int ordinal) 的正确使用方式。LoadLibrary
随着对JNA的深入,需要用到GetProcAddress(HMODULE hmodule, int ordinal)方法,在C语言中第二个参数是一个字符串(通过传入函数的名称得到函数回调地址),但是在JNA中却没用提供这个方法,个人看了一下源码仓库社区谈到的issue,似乎也只有这个方法。但是社区以及源码中没有相关资料对这个ordinal做过多解释。一方面这个值取决于使用dll文件(例如:Kernel32.dll、NTdll.dll等文件),这个ordinal只是用来获取对应的dll文件中的函数序号,那么原创 2022-04-05 05:18:20 · 3003 阅读 · 0 评论 -
LoadLibrary 绝对路径,错误193的(dll 和 跑的程序版本不一致x86和x64)
在写dll注入工具的时候发现始终注入失败文章实例代码C语言远程线程注入(dll 注入技术)本想着注入微信,钉钉等客户端,然后自己写了一个dll 以及一个注入工具,进行测试。在写的过程中没有注意到 dll 编译的版本是 x64,而自己调用dll的程序则是x86然后利用java的System.load("***.dll")发现能调用,就很郁闷,后来发现原来是版本问题。又是一个坑~将dll 与调用的 程序都指定同一个版本即可解决问题。如下:都选择x64远程线程注入的步骤CreateToolh原创 2022-03-22 02:04:45 · 9934 阅读 · 0 评论 -
C语言远程线程注入(dll 注入技术)
注入dll的基本步骤CreateToolhelp32Snapshot 获取进程快照取得进程PIDVirtualAllocEx 申请内存WriteProcessMemory 将dll路径写入指定进程的内存GetModuleHandle 获取Kernel32基址GetProcAddress 获取加载dll 函数地址CreateRemoteThread 在目标进程里执行加载dll 函数,将我们的dll注入到目标进程中// WxDemo.cpp : 定义应用程序的入口点。//#incl原创 2022-03-20 22:55:31 · 2278 阅读 · 0 评论 -
Cheat Engine 和 OllyDBG 常用操作
一、Cheat Engine可以随意下载一个通过CE打开进程1、附加进程,点击图中的 计算机图标弹出对话框,如下2、搜索内容(勾选UTF-16) 否则搜索不到包含中文的内容数据类型选择字符串,数值填入想要输入的内容。搜索内容如果包含中文则勾选UTF-16选项例如有一个微信好友名称带了中文:张三则数据类型:字符串数值输入:张三勾选:UTF-16不然就会搜索不到3、基地址 (绿色)上图中讲到基地址,基地址是一块稳定的内存,是我们重点关注的内容,如果地址为黑色则说明该地址是动态地址,原创 2022-03-20 23:14:38 · 2982 阅读 · 0 评论 -
进程的创建过程
进程是操作系统分配资源的基本单位,线程是CPU调度的最基本单位。进程是唯一的,一个进程可以有很多个线程不同程序通过进程之间进行通信这些结论大家都背的很熟。但是除了这些,你还可以如何解释进程呢?有没有想过从操作系统的角度来思考问题?进程到底是一个什么东西?想一想操作系统是如何创建进程的。为了解决这个问题,得从最基础的计算机科学说起。我们都知道电脑是由 CPU、内存、主板、硬盘等硬件组成的一个集合,当然在我们使用电脑的过程中需要依靠操作系统来帮助我们完成人机之间的交互。而操作系统呢则是一堆.原创 2022-03-13 03:19:04 · 1836 阅读 · 0 评论 -
Debug调试原理 -- 用户态调试模型
bug总是存在的,不可能做到没有bug。很多人和我一样,不知道debug的调试原理,只知道点击IDE的debug调试按钮进行调试程序。我很好奇,java、C、python、js 这些编程语言是如何做到debug的?于是乎就有了今天这篇文章感谢 张银奎 老师录了《Windows 驱动开发 之 WinDbg调试》这套视频,在此之前我也不知道debug是怎么实现的,以前也没有想过这些问题。最近因为工作等一些原因,有幸看到了这套视频,很值得学习。为此,我准备写一些博客记录一下这套视频中一些关键的内容。原创 2022-02-27 00:17:15 · 1309 阅读 · 0 评论