DuiLib逆向分析の按钮事件定位
DuiLib逆向分析の按钮事件定位0x00 前言记录自己学习Duilib逆向分析的笔记。
DuiLib介绍DuiLib官方介绍,Duilib是一个Windows下免费开源的DirectUI界面库,由于简约易扩展的设计以及稳定高效的实现被各大互联网公司普遍接受,广泛应用于包括IM、视频客户端、股票行情软件、导航软件、手机辅助软件、安全软件等多个行业的众多pc客户端软件。Duilib还在不断的发展中,在文档、例子、动画、渲染引擎等多个方面将持续改进。
DirectUI介绍,直接在父窗口上绘图,构建易于扩展的界面。(DirectUI意为直接在父窗口上绘图(Paint on parent dc directly)。即子窗口不以窗口句柄 的形式创建(windowless),只是逻辑上的窗口,绘制在父窗口之上。)
Duilib是一个自绘控件界面库,可以很方便的构建高效,绚丽的,非常易于扩展的界面。
国外如微软,国内如腾讯,百度等公司的客户端产品多采用这种方式来组织界面,从而很好的将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。
DuiLib安装安装DuiLib推荐用C++ ...
Java入门学习笔记
Java入门学习笔记Java常量常量不同于常量值,它可以在程序中用符号来代替常量值使用,因此在使用前必须先定义。
12345final dataType(数据类型) variableName(变量名) = value(值)//final 为定义常量的关键字//dataType 指明常量的数据类型//variableName 变量名称//value 初始化的值
123456789101112public class Hello{ //用final修饰静态变量 public static final double PI = 3.1415926; //用final修饰成员变量 final int y = 10; public static void main(String args[]) { //用final修饰局部变量 final double x = 3.3; }}
常量有三种类型:静态常量、成员常量、局部常量。
常量是不允许被 ...
PE增加节实验-让记事本弹计算器Shellcode
PE增加节实验-让记事本弹计算器Shellcode0x00 前言在上一篇文章中介绍了PE节表的分析,这篇文章主要是对其进行手动实验来加深对节表的理解,并且这里用一个记事本的例子做演示,我们用Winhex软件通过修改、添加十六进制数据让记事本一启动就能弹出计算器。
整体的思路是:给记事本添加一个节,节内添加弹计算器Shellcode十六进制+jmp到原OEP(程序入口点),修改OEP指向->新区段位置。运行记事本让其弹计算器。
0x01 添加新节首先需要找一个32位的记事本,我这里用的是xp系统下的notepad.exe。
修改节数量第一步我们先修改节数量,之前都有介绍节数量在标准PE头中的NT标识后4个字节,这里原本是3我们将其改成4。
节表位置节表位置在可选PE头下面,所以我们先找到可选PE头,并且找到可选PE头的大小就能找到节表位置了。可选PE头大小在NT标识开始0x14字节位置。
添加新节表信息新节信息的位置应该在节表数量*3的位置即:节表开始处+(3 x 0x28=0x78处),一个节信息固定大小0x28。
然后我们将荧光笔中的数据覆盖成我们新节的信息。
...
PE节表详细分析
PE节表详细分析0x00 前言上一篇文章我们学习了PE结构中的PE头,我之前说过PE文件结构是PE头->节表->每个节,所以我们掌握了节表后也就知道怎么去获取每个节了。(当然后面还有输入表,输出表这些比较重要的东西。这些知识在后面的文章详细介绍。)
0x01 PE节表分析节表结构PE节表位于PE头的下面,PE节表中记录了各个节表的起始位置、大小,以及在内存中偏移位置和属性。
其结构体如下:
12345678910111213141516#define IMAGE_SIZEOF_SHORT_NAME 8typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME];//*[1]:节名 union { DWORD PhysicalAddress; DWORD VirtualSize; //*[2]:对其前节大小,内存中节大小 } Misc;//联合体 DWOR ...
PE头详细分析
0x00 前言最近我在学习Linux PWN相关知识的时候,也是在看《程序员的自我修养(装载->链接->库)》这本书的时候,接触到了可执行文件格式,COFF、ELF、PE,所以也找了Bilibili上海东老师的《滴水逆向三期》视频中的PE课程在学习,刚看完PE头这节课。在此做个笔记也算是整理学习的结果 并且分享给大家,共同学习,如有错误欢迎指正。
0x01 PE文件介绍PE文件是Windows上的可执行文件,就是我们鼠标双击就能运行的程序,当然也有双击不能运行的程序。其中.exe、.dll、.sys这些都是PE文件,那么读者可能有个疑问,我双击.txt的文件也是能直接打开运行的啊?Emmmmm….这个其实他是用Notepad记事本加载并打开的,而PE可执行文件他是经过系统加载并运行的。
PE文件是分块存储的。在图中我们可以看出数据被加载到内存后会不一样,其中PE文件被加载到内存中的时候(相当于一个拉伸的过程),把数据给拉长了。
不过块中的数据还是一样的,我们可以看到最开头的快就是PE头的数据,接下来是节表等其他块的数据,这些我们会在后续文章中介绍。
0x02 ...
PWN环境搭建
本教程主要参考PWN虚拟机配置、Linux Pwn入门教程—–环境配置 、星盟安全 PWN系列教程 PWN环境配置 。
需要的工具或系统
VMware16
Kali
如何安装VM虚拟机,虚拟机如何安装kali系统,这里就不再介绍,读者可自行通过搜索引擎查找相关资料,这里主要记录下kali安装相关pwn工具的过程。
安装PWN工具pwntools (CTF库、漏洞利用库)1234#提前安装pipsudo apt-get install python3-pip#安装pwntoolspip install pwntools -i https://pypi.tuna.tsinghua.edu.cn/simple
pwngdb(GDB插件)123git cloen https://github.com/pwndbg/pwndbgcd pwndbg./setup.sh
checksec(查保护)安装完pwntools后,checksec会自动被安装上,此工具主要用来查程序保护。
1checksec hackpwn
ROPGadget(二进制文件查找工具)1234sudo ...
PWN二进制漏洞学习指南
前言最近准备学PWN,所以买了《CTF权威指南(PWN)篇》的书粗略的看完后,在这里做个学PWN需要掌握的知识指南,如有补充欢迎评论。
前置技能首先我觉得要学习PWN还是要有一定基础的,因为PWN毕竟是和系统底层知识打交道,所以我觉得应该具备如下的一些技能,并且我推荐了一些不错的书籍。
Linux系统基础知识《鸟哥Linux私房菜》、《Linux就该这么学》、《Linux命令大全》
Linux下C语言编程 《Linux C编程一站式学习》
Python编程基础知识 《Python编程:从入门到实践》
汇编语言《汇编语言(第4版)》、 王爽8086汇编学习笔记
熟悉ELF文件格式 《Linux二进制分析 》
熟悉GDB动态调试 gdb调试常用指令
PWN概念概述PWN我觉得最开始的时候应该是没有这门学科和系统化的资料教程的,PWN本身属于高阶技能,个人感觉都是以前那些逆向大佬、编程大佬开始玩点高级的东西,然后就开始挖漏洞,结果就挖出了各种二进制漏洞,并且把二进制漏洞也完美的利用起来了,后面就归纳总结出一套体系供后人学习,在此真的膜拜那些前辈的共享精神。
发音至于PWN为什么 ...
Python入门学习总结
前言由于有其他高级语言的开发经验,所以入门学起来就快很多,不用像初学那样详细的看,我根据《Python编程:从入门到实践(第2版)》做个简单笔记总结。
安装安装就不记录了,傻瓜式的下载Python安装包,然后运行python来确定是否已经添加到环境变量、安装完毕,当然还要安装pip.
数据类型Hello,World先来写个简单的Hello,World看看
12msg = "Hello,World!"print(msg)
变量和其他高级语言意思一样,Python推荐命名规范用下划线划分单词,比如greeting_message,有空格会引发错误比如greeting message.
字符串在编程中最常用的应该就是字符串相关的处理了。
Python中推荐字符串用””来包括单引号,用’来包括双引号,比如:
1234567891011"The language `Python` is named after Monty Python,not the snake."'I told my friend,"Python is ...
CALL指令详解
call和ret指令概述:call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。他们经常被用来实现子程序(函数)的设计。
ret和retfret指令ret指令:用栈中的数据,修改IP的内容,从而实现(近转移);CPU执行ret指令时,需要进行下面两个步骤:
相当于:pop IP
(1) (IP) = ((ss)*16+(sp))
(2) (SP)=(sp)+2retf指令retf指令:用栈中的数据,修改CS和IP的内容,从而实现(``远转移`)。
CPU执行retf指令时,需要进行下面四个步骤
相当于:pop CS,pop IP
(1) (IP) = ((ss)*16+(sp))
(2) (SP) = (sp)+2
(3) (CS) = ((ss)*16+(sp))
(4) (SP) = (sp)+2
123456789101112131415161718192021222324252627;************************************; ret指令实验 * ; ...
转移指令原理和Inline Hook
转移指令可以修改IP,或同时可以修改CS和IP的指令统称为:转移指令
8086CPU的转移行为有以下几类:
只修改IP时,称为段内转移,比如:jmp ax。
同时修改CS和IP时,称为段间转移,比如:jmp 1000:0。
由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。
短转移IP的修改范围为-128~127(0xFF)
近转移IP的修改范围为-32768~32767(0xFFFF)
8086CPU的转移指令分为以下几类:
无条件转移指令(jmp)
条件转移指令(jnz jz..)
循环指令(loop)
过程
中断(int)
操作符offset操作符offset是伪指令,在汇编语言中由编译器处理的符号,它的功能是取得标号的偏移地址
jmp指令jmp为无条件转移指令,可以只修改IP,也可以同时修改CS和IP。
jmp指令要给出两种信息:
(1) 转移的目的地址
(2) 转移的距离(段间转移、段内短转移、段内近转移)
1234jmp short 标号jmp near ptr 标号jcxz 标号loop 标号 等几种汇编指令,它们对 IP的修改是根 ...