- 博客(41)
- 收藏
- 关注
原创 一个CrackMe的分析
0x00 初探 程序有ASLR,不方便分析,使用FFI去掉。 OD载入后,发现程序退出。 给ExitProcess下断点,然后重新载入程序,成功断下。修改代码为retn 4即可。 此时即可使用OD调试。运行后,[确认]按钮是禁止状态。 0x01 寻找编辑框的输入事件 用彗星探测一下编辑框的句柄 给GetWindowTextW下条件断点。 输入一个字节即可断下。
2017-12-10 18:52:09 817 1
原创 2017HCTF第一题WP
0x0 初探 先用PEID查看一下CM的信息 从图中可以发现,程序使用Debug的编译方式编译且有一个TLS回调函数。 因为程序有ASLR,不方便分析,因此我用FFI去掉后再继续分析。 1x0 分析TLS回调函数 OD载入,断在TLS入口处。 一共有四个函数,其中前两个我们需要关注一下。因为这两个函数是反调试的函数。 1x1 分析函数 0041141A CM先创建一个
2017-11-12 19:33:12 636
原创 SWPU RE类第二题WP
这道题目满分刚好是100分。。。 程序有ASLR,用FFI去掉方便分析。 去掉以后,OD载入,F9运行,给GetWindowTextA下端点,然后输入一个注册码就可以断下。 F8单步回到004026A6处后,CM判断注册码的字节数,如果不是16个字节就返回。 删掉之前设置的所有断点,在004026BE处下一个断点。这样输入16个字节就可以断下了。 然后CM重新计算了注册码的长度
2017-11-02 22:03:19 355
原创 160个CrackMe之41
因为这是我做的第一个PatchMe,所以哪里不对还请大佬们指出来。 0x0 初探 首先,程序有一个rules.txt,内容如下: 下载以后,发现CM中有一个rules.txt,内容如下: 只看得懂一部分,大致是说,给Exit菜单添加代码,单击的时候弹出一个信息框,内容是”Do you fickbirne really want to quit?”,如果点[是]就退出,否则不退出。打开CM看一
2017-10-21 23:54:25 452
原创 160个CrackMe之51
我不是大神,所以文章哪里写的不对的地方还请各位大佬指出。 直接来到算法部分0x0040104B处,分析发现算法很简短,主要分成了两部分。 第一部分:0040105C A1 21214000 mov eax, dword ptr [0x402121] ; 注册码的前四个字节00401061 B9 02000000 mov ecx, 0x2
2017-10-15 12:59:13 305
原创 160个CrackMe之123
我并不是大神,所以哪里写的不对,还请各位大佬们指出来。0x0 分析算法 OD载入,搜索字符串,发现关键函数0x004013C0,给这个函数下断点,然后随便输入一串注册码,程序成功断下。首先,程序将字符串”ABCDEFGHIJKLMNOPQRSTUVWXYZ”拷贝到一个新的地址处00401421 B9 06000000 mov ecx, 0x600401426 BE 4
2017-10-01 18:03:00 801
原创 160个CrackMe之91
个人感觉这个CM是我玩过的最另类的一个了,如果有什么不对的地方还请各位大佬更正。 0x0 寻找按钮事件 OD载入,发现程序打开crueme.dat文件,如果打开失败则提示错误然后结束程序。00401043 6A 00 push 0x000401045 68 80000000 push 0x800040104A 6A 03
2017-10-01 13:19:05 517
原创 一个ReverseMe的算法分析
这个ReverseMe是我一年前写的,不过现在源代码丢了而且怎么写的也忘了。正好昨天逛一个论坛的时候看到了那个CM,就顺便下载玩了玩(也算是重温了一下),于是就有了这篇文章。 因为篇幅有限 我就写写关键的地方。 0x0 寻找算法地址 直接来到main函数(0x004019B2)处。 程序首先获取ntdll!ZwContinue函数的地址,然后保存到0x00417F7C处。004019BE
2017-09-26 22:40:24 464
原创 160个CrackMe之11
我不是大神,只是一个菜鸟,所以文章中有哪里不对的地方还请各位大佬们指出。 0x0 寻找验证函数 仔细看一下CM 发现没有任何验证的地方,于是我猜测应该有个时钟或者线程在一直验证注册码是否正确。 直接给SetWindowTextA下断点,然后点击按钮1即可断下。 返回到0x004035A1处,向上滚动滚轮找到函数头0x004034E0处,下断点然后F9 再点击刚才的按钮即可断下。 这段
2017-09-16 20:25:30 573
原创 写了一个添加节感染Intel X86 PE文件的程序(Virus)
为了加深一下PE文件的理解 就随手写了一个其实ASM才是病毒的王道23333不需要重定位 嘿嘿~这个程序会感染当前目录以及所有子目录中的所有的Intel x86类型的PE文件写的不是很好 大牛勿喷..686p.model flat,stdcalloption casemap:noneinclude InfectPe.inc.codestart: assume
2017-02-08 13:03:43 591
转载 RDMSR--读MSR
RDMSR--读MSR RDMSR将64位由ECX寄存器指定的MSR(model specific register,模式指定寄存器)的内容读出至寄存器EDX:EAX中(在支持intel64架构的处理器中RCX的高32位忽略)。MSR的高32位内容存放在EDX寄存器中,MSR的低32位内容存放在EAX寄存器中(在支持intel64架构的处理器中RDX和RAX的高32位忽略)。如果M
2016-07-30 14:58:09 4921
转载 WRMSR--写MSR
WRMSR--写MSR WRMSR将寄存器EDX:EAX的内容写到64位由ECX寄存器指定的MSR(model specific register,模式指定寄存器)中(在支持intel64架构的处理器中RCX的高32位忽略。)。EDX寄存器内容拷贝至选定的MSR的高32位,EAX内容拷贝至选定的MSR的低32位(在支持intel64架构的处理器中RDX和RAX的高32位忽略)。MS
2016-07-30 14:57:42 710
转载 SYSEXIT——快速系统调用的快速返回
SYSEXIT——快速系统调用的快速返回 SYSEXIT用来快速调用返回至3层的用户代码。SYSEXIT是SYSENTER的同伴指令。该指令经过了优化,它可以使将由操作系统或执行程序(运行在0层)至用户代码(运行在3层)的返回发挥最大的性能。该指令只能在0层的权限执行。 在调用SYSEXIT指令前,软件必须通过MSR寄存器和通用寄存器,指定3层的代码段和代码指针,3层的堆栈段和堆栈
2016-07-30 14:57:18 514
转载 SYSENTER——快速系统调用
SYSENTER——快速系统调用 SYSENTER用来快速调用一个0层的系统过程。SYSENTER是SYSEXIT的同伴指令。该指令经过了优化,它可以使将由用户代码(运行在3层)向操作系统或执行程序(运行在0层)发起的系统调用发挥最大的性能。 在调用SYSENTER指令前,软件必须通过下面的MSR寄存器,指定0层的代码段和代码指针,0层的堆栈段和堆栈指针:1. IA
2016-07-30 14:56:28 328
原创 做了一个Dump exe文件的工具
为了加深对PE文件的理解,以及和进程有关的WIN32 API的应用,就做出了这么一个东西。DUMP的话只需要DUMP出DOS头 + PE头 + 区块即可。#include "stdafx.h"typedef struct { WORD e_magic; char Data[23 + sizeof(DWORD) * 3]; LONG e_lfanew;}Dos,*pDos;int
2016-07-30 14:54:26 4174
原创 sysenter HOOK反OD调试
sysenter指令:SYSENTER用来快速调用一个0层的系统过程。SYSENTER是SYSEXIT的同伴指令。该指令经过了优化,它可以使将由用户代码(运行在3层)向操作系统或执行程序(运行在0层)发起的系统调用发挥最大的性能。 在调用SYSENTER指令前,软件必须通过下面的MSR寄存器,指定0层的代码段和代码指针,0层的堆栈段和堆栈指针:1. IA32_SYS
2016-05-12 20:01:08 2155
原创 写一个虚拟机的模型
代码虚拟化:我认为代码虚拟化是将native转换为字节码,但是字节码是不能被机器识别的,所以就需要有对应的解释器来解释他。因为字节码是我们定义的,所以一般的工具不能正确的识别它。就因为这样,虚拟机保护的代码比较难以识别破解,但是解释器一般情况下都是native 因为这样才能使解释器运行起来并解释字节码。
2016-02-27 17:26:18 1466
原创 使用retn指令调用API
PS:我也是菜鸟,有什么不对的地方欢迎大牛拍砖。使用Retn指令调用API的好处就是:在OD中对你用Retn调用的API下断点时,不会显示API调用地址。
2016-02-19 11:16:52 1777
原创 简单感染PE文件
这个感染方式和win9x时代的CIH病毒感染方式很像。。。这个程序的感染标识放在了DOS头中。。。因为DOS头只有MZ和最后一个指向PE头的指针很重要,改了就完蛋了。。。别的几乎用不到所以修改DOS头的话,只要不修改首尾字段,几乎不会影响程序的运行。
2016-02-16 18:05:02 2762 1
原创 C语言实现区块加密
哈 学了几节PE格式,写了一个这玩意(还有一个PE信息查看的 没写完呢)需要的基础知识:只需要一点点的PE结构基础就可以了参考小甲鱼老师的PE结构详解(听懂其中前三节左右)
2016-02-03 18:25:39 801
原创 C/C++中多字符集转宽字符集
#include int main(void){ LPSTR text="Unicode 测试"; wchar_t textW[256]; MultiByteToWideChar(CP_ACP,0,text,-1,textW,strlen(text)); MessageBoxW(NULL,textW,NULL,MB_OK); return 0;}
2016-01-24 14:35:08 805
原创 DLL劫持技术
DLL劫持技术不想再说了,具体的可以百度。。。。先简单的说一句。。。运行一个PE文件,WINDOWS会首先在当前目录下寻找要用的DLL,如果找不到就上其他地方找,一直到系统目录。。。然后想干嘛就干嘛了。。。首先得伪造,别告诉我随便找个PE文件然后改一下名字就是伪造了。。。。怎么伪造呢?当然是伪造导入表。
2016-01-18 20:03:29 4581 3
原创 C语言简单比较图片
我觉得,比较图片直接比较图片的二进制码就可以了。因为如果二进制码改变了,这个图片一定会改变的。不过改变的是什么我们就不用管了。比如画质什么的。 也可以用像素比较。不过。。。。。。。唉,一直没思路
2015-12-21 19:40:02 2558
原创 C/C++用户模式下备份并改写MBR
原理已经说过了,不想再说了。其实用API备份修改硬盘那么复杂。。。我只是想说:库函数也可以打开硬盘。。。。。
2015-12-19 13:40:40 2075
原创 C/C++用户模式下改写硬盘主引导记录(MBR)
CPU一共有四种权限级别:ring0 ring1 ring2 ring3Windows只是用了ring0和ring3我们在使用电脑时,一般在ring3模式下工作。在ring3模式下,我们无法使用CPU特权指令in和out。对系统所属的数据,地址空间以及硬件也是有严格的限制的。
2015-12-12 16:14:11 7156 6
原创 C/C++检测进程是否被调试
程序使用API SetUnhandledExceptionFilter 来注册一个未处理异常的函数1,如果进程没有被调试,那么会触发一个未处理异常,导致操作系统会将控制权交给函数1。如果进程被调试,则调试器会捕捉这个未处理异常。这样,我们的函数1也就不会被执行了。这里在触发异常时,则是跳回原来的代码来执行,而不会退出程序。UnhandledExceptionFilter 这个函数修改了EI
2015-12-06 17:51:07 2737 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人