跳至主要内容

博文

目前显示的是 十二月, 2017的博文

UPX 脱壳之upx壳部分的代码分析

http://ift.tt/2AmVQ0n 0046DF7D 90 NOP 0046DF7E 90 NOP 0046DF7F 90 NOP ; 花指令 0046DF80 > 60 PUSHAD 0046DF81 BE 00704400 MOV ESI,00_upx.00447000 0046DF86 8DBE 00A0FBFF LEA EDI,DWORD PTR DS:[ESI+0xFFFBA000] ; edi = 第一个区段的va 0046DF8C C787 9C400500 4>MOV DWORD PTR DS:[EDI+0x5409C],0xD05CFA4> 0046DF96 57 PUSH EDI ; 第一个区段的va入栈 0046DF97 83CD FF OR EBP,0xFFFFFFFF ; ebp=-1 0046DF9A EB 0E JMP SHORT 00_upx.0046DFAA 0046DF9C 90 NOP 0046DF9D 90 NOP 0046DF9E 90 NOP 0046DF9F 90 NOP 0046DFA0 8A06 MOV AL,BYTE PTR DS:[ESI] 0046DFA2 46 INC ESI 0046DFA3 8807 MOV BYTE PTR DS:[EDI],AL 0046DFA5 47 INC EDI 0046DFA6 01DB ADD EBX,EBX 0046DFA8 75 07 ...

ASPACK 壳代码全解析

http://ift.tt/2B0IJS5 01237001 > 60 PUSHAD 01237002 E8 03000000 CALL 00_aspac.0123700A 01237007 - E9 EB045D45 JMP 468074F7 ; 花指令 0123700C 55 PUSH EBP 0123700D C3 RETN 0123700E E8 01000000 CALL 00_aspac.01237014 01237013 EB 5D JMP SHORT 00_aspac.01237072 ; 花指令 01237015 BB EDFFFFFF MOV EBX,-0x13 0123701A 03DD ADD EBX,EBP ; ebx -0x13,就是把零头给减去了,因为本来的指令就是末尾带着13 0123701C 81EB 00700100 SUB EBX,0x17000 ; 然后减去这个数,怀疑是基址,看了一下果然是程序的加载基址 01237022 83BD 88040000 0>CMP DWORD PTR SS:[EBP+0x488],0x0 01237029 899D 88040000 MOV DWORD PTR SS:[EBP+0x488],EBX 0123702F 0F85 CB030000 JNZ 00_aspac.01237400 ; 这个发现,跟这个地址里面的内容比较,如果不是0,直接跳转到popad附近了,感觉因该是判断有没有加壳的标志 01237035 8D85 94040000 LEA EAX,DWORD PTR SS:[EBP+0x494] ...

手工加壳Demo- C++Version

http://ift.tt/2AAEutK // 手动加壳demo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> #include <string.h> typedef struct _StubConf { IMAGE_NT_HEADERS ntheader; }STUBCONF; class PeFile { public: PeFile(); ~PeFile(); bool OpenFile(const char*FilePath); bool InitHdrs(); PIMAGE_SECTION_HEADER addSection(const char * secName, DWORD dwSecSzie); PIMAGE_SECTION_HEADER getSection(const char* secName); DWORD Size2ALi(DWORD dwSize, DWORD dwALi); void peclose(); void setOpe(DWORD newOep); LPVOID peGetProcAddress(const char* szFnName); DWORD RVATOOFFSET(DWORD rva); ULONG_PTR getfileBuff(); PIMAGE_NT_HEADERS getNtHeader(); PIMAGE_OPTIONAL_HEADER getOptionHeader(); void fixStubReloc(DWORD oldImageBase, DWORD newImageBase, DWORD oldSectionRva, DWORD newSectionRva); void setSecData(IMAGE_SECTION_HEADER* pScn, void* pSectionData, DWORD dwSectionSize); bool savea...

加壳原理之在OEP前执行代码

http://ift.tt/2ARJ9dy 目标:再程序入口点前执行一个MessageBox,然后返回到程序入口点,正常执行程序 00411358 64:A1 30000000 MOV EAX,DWORD PTR FS:[0x30] 0041135E 8B40 0C MOV EAX,DWORD PTR DS:[EAX+0xC] 00411361 8B40 0C MOV EAX,DWORD PTR DS:[EAX+0xC] 00411364 8B00 MOV EAX,DWORD PTR DS:[EAX] 00411366 8B00 MOV EAX,DWORD PTR DS:[EAX] 00411368 8B40 18 MOV EAX,DWORD PTR DS:[EAX+0x18] ; 获取kernel32.dll的Hmoudle 0041136B 51 PUSH ECX ; 保存寄存器环境 0041136C 8BC8 MOV ECX,EAX 0041136E 51 PUSH ECX ; 保存一下kernel32的hModule,GetPRocessd 的时候还要用 0041136F E8 0C000000 CALL 00411380 00411374 75 73 JNZ SHORT 004113E9 00411376 65:72 33 JB SHORT 004113AC 00411379 322E XOR CH,BYTE PTR DS:[ESI] 0041137B 64:6C INS BYTE PTR ES:[EDI],DX 0041137D 6C INS BYTE PTR ES:[EDI],DX 0041137E 00CC AD...

反Hook 之自己实现GetProcAddress和LoadLibraryA(c++ version)

http://ift.tt/2AocAD0 // 课上练习.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> //要实现的功能: /* 自己实现GerProcAddress LoadLibraryA */ //思路: /* GerProcAddress和LoadLibraryA都是在Kernel32.dll中的 首要的任务就是找到Kernel32.dll,然后遍历IAT就能找到这两个函数 现在首要的难点就是如何找到kernel32.dll() 通过dll的加载顺序可以找到,而且虽然需要使用未文档化的API,但是好在windgb可以直接看,而且用到的也并不是很多 懒得去晚上搜了,直接自己实现一个得了,作为演示,能用就行(最好还是搜一个正规的结构体) */ /* 0: kd> dt _TEB /a nt!_TEB +0x000 NtTib : _NT_TIB +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID +0x028 ActiveRpcHandle : Ptr32 Void +0x02c ThreadLocalStoragePointer : Ptr32 Void +0x030 ProcessEnvironmentBlock : Ptr32 _PEB //首先实现部分TEB结构体,因为只需要用的PEB的部分,所以实现到这就ok了 */ //构建 TEB typedef struct _TEB { //保证0x30是peb的结构体就ok了 struct _tem { DWORD a1; DWORD a2; DWORD a3; DWORD a4; DWORD a5; DWORD a6; DWORD a7; DWORD a8; DWORD a9; DWORD a10; ...

手把手教你WINRAR 去广告 — 小白向

http://ift.tt/2j9fwde 前言 工具 熟悉软件流程 直接开干 开始分析 保存 效果展示 前言 Winrar 是windows平台下一款非常强大的解压软件,免费版就已经够用了,但是老是弹广告实在是受不了啊,今天就教大家怎么去除winrar 的广告 工具 32位Winrar OllyDbg spy++ 熟悉软件流程 如图,只要想破解的就是去掉烦人的广告 用spy++ 查看窗口的类名 和窗口名 直接开干 首先,如果想要实时播放广告,肯定是需要进行网络请求的 可以考虑从以下几个点入手 socket相关API 因为我以前从事过商业广告相关的业务,所以了解可能会有自己的广告链接地址到PDB,说不定http字符串没有加密呢LOL 窗口创建方式,是createwindow 还是dialog 开始分析 找到安装目录下的exe 文件,拖进OD 先从最简单的搜索字符串开始分析,说不定人家就没有加密呢 果然没有加密,一下就搜到了 下断点,看是不是这个字符串 F9跑起来 可以看到果然断在了这里,证明我们下的断点是正确的 012B4535 . 68 F8BE3301 PUSH WinRAR.0133BEF8 ; http://ift.tt/2j9lta2 012B453A . E8 A17CFDFF CALL WinRAR.0128C1E0 012B453F . 8B0D F8703801 MOV ECX,DWORD PTR DS:[0x13870F8] ; 跨Υ 012B4545 . 8D85 20100000 LEA EAX,DWORD PTR SS:[EBP+0x1020] 012B454B . 6A 01 PUSH 0x1 012B454D . 50 PUSH EAX 012B454E . 6A 00 PUSH 0x0 012B4550 . FF35 08713801 PUSH DWORD PTR DS:[0x1387108] 012B4556 . FF35 70AF3701 PUSH DWORD PTR ...

手把手教你WINRAR 去广告 — 小白向

http://ift.tt/2Bqls8z 前言 工具 熟悉软件流程 直接开干 开始分析 保存 效果展示 前言 Winrar 是windows平台下一款非常强大的解压软件,免费版就已经够用了,但是老是弹广告实在是受不了啊,今天就教大家怎么去除winrar 的广告 工具 32位Winrar OllyDbg spy++ 熟悉软件流程 如图,只要想破解的就是去掉烦人的广告 用spy++ 查看窗口的类名 和窗口名 直接开干 首先,如果想要实时播放广告,肯定是需要进行网络请求的 可以考虑从以下几个点入手 socket相关API 因为我以前从事过商业广告相关的业务,所以了解可能会有自己的广告链接地址到PDB,说不定http字符串没有加密呢LOL 窗口创建方式,是createwindow 还是dialog 开始分析 找到安装目录下的exe 文件,拖进OD 先从最简单的搜索字符串开始分析,说不定人家就没有加密呢 果然没有加密,一下就搜到了 下断点,看是不是这个字符串 F9跑起来 可以看到果然断在了这里,证明我们下的断点是正确的 012B4535 . 68 F8BE3301 PUSH WinRAR.0133BEF8 ; http://ift.tt/2j9lta2 012B453A . E8 A17CFDFF CALL WinRAR.0128C1E0 012B453F . 8B0D F8703801 MOV ECX,DWORD PTR DS:[0x13870F8] ; 跨Υ 012B4545 . 8D85 20100000 LEA EAX,DWORD PTR SS:[EBP+0x1020] 012B454B . 6A 01 PUSH 0x1 012B454D . 50 PUSH EAX 012B454E . 6A 00 PUSH 0x0 012B4550 . FF35 08713801 PUSH DWORD PTR DS:[0x1387108] 012B4556 . FF35 70AF3701 PUSH DWORD PTR ...

160个Crack Me 之002 Afkayas.1

http://ift.tt/2iwDRwK 前期准备 熟悉软件流程 开干 前期准备 熟悉软件流程 好像也没有什么可以看的,目测也是很简单(当然要逆出算法还是需要花功夫的,暂时还是以爆破的方式逆吧) 软件流程: PEID看一下 开干 没有特别的,直接上OD吧 对这种程序断API都嫌麻烦,还是直接搜索字符串吧,应该直接就能找到跳转 0040258B /74 58 JE SHORT Afkayas_.004025E5 ; 关键跳转 0040258D |68 801B4000 PUSH Afkayas_.00401B80 ; You Get It 00402592 |68 9C1B4000 PUSH Afkayas_.00401B9C ; \r\n 00402597 |FFD7 CALL EDI 00402599 |8BD0 MOV EDX,EAX 0040259B |8D4D E8 LEA ECX,DWORD PTR SS:[EBP-0x18] 0040259E |FFD3 CALL EBX 004025A0 |50 PUSH EAX 004025A1 |68 A81B4000 PUSH Afkayas_.00401BA8 ; KeyGen It Now 004025A6 |FFD7 CALL EDI 004025A8 |8D4D 94 LEA ECX,DWORD PTR SS:[EBP-0x6C] 004025AB |8945 CC MOV DWORD PTR SS:[EBP-0x34],EAX 004025AE |8D55 A4 LEA EDX,DWORD PTR SS:[EBP-0x5C] 004025B1 |51 PUSH ECX 004025B2 |8D45 B4 LEA ...

160个CrackMe之001 Acid burn

http://ift.tt/2i73gJv [TOC] 前期准备工作 熟悉软件流程 首先打开软件,熟悉一遍软件的流程,以便了解基本导入口点 可以看到,界面的主要交互有2个,以一个是serial/name 还有一个就是serial 查看PE信息 首先用PEID扫一下,看看是什么语言编写的,连接器版本,有没有壳,TLS回调函数等 查看了这写信息之后,主要想做的事情就是点击check 的时候正确就好了(其实应该是逆出算法更好的,但是真心不想动) 开干 下断分析 根据点击发现,输入错误的时候,会填出一个框用来提示,那么猜一下这个框是什么东西,是MessageBox 还是Dialog 或者其他的,不妨挨个下断点试试 就还有一个点就是弹出的框中有字符串提示,其实可以搜一下字符串,直接找到这个定位(鉴于这样做的成本最小,所有先从搜索字符串开始吧) ###第一步 - 破解serial/name 果然,一搜就搜到了,果然难度为1的就是简单的 直接定位过去 0042FB03 /75 1A JNZ SHORT Acid_bur.0042FB1F 0042FB05 |. |6A 00 PUSH 0x0 0042FB07 |. |B9 CCFB4200 MOV ECX,Acid_bur.0042FBCC ; Congratz !! 0042FB0C |. |BA D8FB4200 MOV EDX,Acid_bur.0042FBD8 ; Good job dude =) 0042FB11 |. |A1 480A4300 MOV EAX,DWORD PTR DS:[0x430A48] 0042FB16 |. |8B00 MOV EAX,DWORD PTR DS:[EAX] 0042FB18 |. |E8 53A6FFFF CALL Acid_bur.0042A170 0042FB1D |. |EB 18 JMP SHORT Acid_bur.0042FB37 0042FB1F |> \6A 00 PUSH 0x0 0042FB21 |. B9 74FB420...