- 博客(81)
- 收藏
- 关注
原创 RadAsm—新建工程路径补丁分析和OD换x32dbg
这下就好办了,00438AA6的函数指令占5个字节,我们只要构造一个5字节的跳转指令,然后把函数指令修改成跳转指令,跳转到我们想要的地址去执行我们的代码,接下来我们就去找一个空地,然后计算跳转偏移修改00438AA6地址的指令即可,此时思路明确了,现在栈上参数[ESP]是对话框句柄,[ESP+4]是控件ID,哈哈,刚好就是GetDlgItem的参数,所以可以直接调用,接下来直接搜模块调用,找一个GetDlgItem的调用,复制它的反汇编,粘贴到我们这里。来进行设置的(我怎么知道?
2025-02-17 00:22:51
882
原创 Brad Soblesky.2.exe—分析和注册机
发现用到了寄存器ECX的参数,只有返回看一下参数是啥,发现 第一次循环在004015BE地址 [EBP-20] == 0,然后把[EBP-20]里面的值0进行了压栈,并且ECX的值是[EBP-0x14]这个栈地址。00401579的JGE指令结合上下文,就表示004015BE的位置就要开始进一步处理了,那么我们就在00401579下断,运行,输入>= 5个字符的用户名,看接下如何处理。这下这个函数知道是啥意思了,就是取字符串的一个字节,EDX是索引,EDX== [EBP+8]==外面[EBP-20]的值。
2025-02-15 21:48:52
487
原创 Windows 系统 内部版本号
注:win2000以前不能使用"RtlGetNtVersionNumbers",ntdll.dll还未实现它,可以使用使用GetVersionEx。
2025-01-27 12:38:54
301
原创 Windows—窗口遍历
GetDesktopWindow()是所有顶层窗口的。EnumChildWindows()是用于枚举。EnumWindows()是用于枚举。GetWindow()(Z序)
2025-01-14 14:15:10
137
原创 内核—私有句柄表
每一个进程都有自己的私有句柄表,在一个进程中使用OpenProcess打开另一个进程时,则会将被打开进程在内核对象的 _EPROCESS 结构体完整的映射到打开进程的私有句柄表中。这个句柄表由进程的内核对象管理,通常包含进程私有的资源句柄,如内存分配和特定的文件句柄。注意:是映射,不是创建,被打开进程的_EPROCESS在创建时就已经存储到全局句柄表中了,其他进程打开时直接从这里映射一份即可。私有句柄表中的句柄在该进程内有效,无法被其他进程直接访问,因此其范围和生命周期与进程相同。
2024-11-04 20:23:04
385
原创 内核——全局句柄表
最重要的字段是:TableCode,当这个字段值的低2位,决定了有几层表,如果0x9c29c001,低2位是0,就代表只有一层,0x9c29c000指向的就是最终的全局句柄表,如果0x9c29c001,低2位是1,就代表只有两层,0x9c29c000指向下一层表,然后下一层表才指向最终的全局句柄表,那么0x9c29c002同理,可以看到TypeIndex字段的值是0x7,它其实也是一个表的索引,这个表就表示这个值是进程还是线程还是其他,我们 dp ObTypeIndexTable。
2024-11-04 14:21:25
717
原创 SSDT —— Hook
Win7 x32:注:SSDTShadow包含SSDT,在Xp系统下,SSDTShadow在SSDT上面(偏移0x40)在WIN7 x32下,SSDTShadow在SSDT下面(偏移0x40),如上图0x9C0+0x40=0xA00。
2024-10-23 21:50:03
311
原创 IRP默认最小流程
irp相当于ring3下的消息,应用程序对驱动程序进行操作的时候会发出相应的消息,驱动程序根据这些消息做出相应的操作。上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求,操作系统将相应的I/O请求转换成相应的IRP,不同的IRP会根据类型被分派到不同的派遣例程中进行处理。 和 很类似,都是直接访问R3的内存地址,但有内存映射机制开销比大,然而最安全。写入:R0直接读取R3的缓冲区,写出:R0直接写入R3的缓冲区。
2024-10-13 21:51:58
525
原创 IRQL中断优先级
当程序的中断请求级>=DISPATCH_LEVEL之上时,程序只能使用非分页内存,否则导致蓝屏死机。产生的中断,有执行的先后顺序(看那个优先级高,就执行那个)。非分页内存:不会和电脑硬盘进行交互。DISPATCH_LEVEL最高。PASSIVE_LEVEL最低。分页内存:会和电脑硬盘进行交互。软件中只会处理下面三种级别.APC_LEVEL 其次。
2024-10-11 22:35:44
217
原创 第一个内核程序
把虚拟机里的DeBugView菜单中的 Capture - Enable Verbose Kernel Output 勾去掉,ed nt!如果windbg一直打印信息,导致很卡。
2024-10-11 22:21:02
194
原创 反调试—2
就后面的几个异常而言:程序不挂调试器,是不会产生异常的,只是无效操作(你的代码产生的错误,不够发生异常,并不是不挂就永远不会异常)。挂了调试器就会抛出异常(内核抛),调试器接受异常,由于调试器只能处理断点异常,所以调试器有会把异常还给程序的异常处理模块,所以执行了return TRUE;如果不挂调试器,程序要执行__except块,必须在抛一个异常(throw)或者代码错误足够产生异常才会进入,不然永远不会进去__except块。
2024-09-29 22:22:01
274
原创 反调试—1
上面有些都是依靠api,如果对方挂钩了,api就失效,只有手动实现标志位检查。其内部实际调用NtQueryInformationProcess()FS指向TEB,FS:30指向PEB,PEB+2指向debug标志。GS指向TEB,GS:60指向PEB,PEB+2指向debug标志。
2024-09-29 15:48:23
640
原创 反汇编—switch
标号1的位置要计算出:减去(debug) / 加上(release)第一个case要等于0,因为第一个case在跳转表数组的0下标位置。可以看到原本应该是case12和case14的位置显示的是def,故case12和case14缺项,代码如下。通过1和2,可以知道它们应该是连续case,还要判断是否缺项,进入跳转表看。x64和x86分析类似。
2024-09-24 10:14:48
273
原创 101012分页属性
PS (大小页位):1大页(4M),0小页(4k)后面还有PTE。G(页属性位):1全局页TLB不随进程变化刷新,0即刻刷新。U/S(权限位):1(User),0(System)(PWT、PCD、PAT)的组合和TLB(缓存)有关。A(物理页访问位):1已被访问(读/写),0没有。D(页访问位):1已被访问(读/写),0没有。R/W(读写位):1可读可写,0可读。P(有效位):1有效,0无效。Avail(可用性位):忽略。
2024-09-17 21:12:29
283
空空如也
“灰帽黑客:攻守道”这本书出版了吗
2024-05-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人