upx 关于脱壳的命令格式如下:upx -d 要脱壳的文件如:UPX -d 132.EXEpEID 里有个通用脱壳机,可以试试而且手工找入口点也是很简单的找pushad对应的Popad,在popad旁的跳转命令就是跳到文件的原入口点了
在这篇文章中,我们将简单介绍如何在通过TCP通信的位置无关代码(PIC)中实现数据加密。
背景: 除了命令行upx -d脱壳,还有手动脱壳。ESP定律的本质是堆栈平衡,又称堆栈平衡定律,是应用频率最高的脱壳方法之一,脱壳的目的就是找到真正的OEP(源文件的EP代码)
首先,用PEid打开加壳后的程序CrackmeUPX.exe,可以发现使用的是UPX壳。UPX壳是一种比较简单的压缩壳,只需要根据堆栈和寄存器的值进行调试,就能找到程序的正确入口点。当然,如果不怕麻烦的话,也可以全程单步调试,直到出现像正常程序的入口点一样特征的代码,这样就找到了入口点。
UPX 0.89.6 – 1.02 / 1.05 – 2.90 (Delphi) stub -> Markus & Laszlo
假设如下Struct: tvm struc cpu dq 10 dup(0efh) vst dd 0 stack db VIRTUAL_STACK dup(0) g1m dq offset fg1m excpustotebstkb dq offset fexcpustk x64pushad dq offset fx64pushad x64popad dq offset fx64popad popadcy dq offset fpopadcy popadcysd dq o
0x1000地址的call指令执行后跳转到0x3000地址处执行,执行完毕后再返回执行call指令的下一条指令。
本文主要介绍的是Windows软件漏洞的利用开发教程。我花了大量的时间来研究了计算机安全领域Windows漏洞利用开发,希望能和大家分享一下,能帮助到对这方面感兴趣的朋友,如有不足,还请见谅。
有时候可能会失败,需要切换使用正确的UPX版本。Windows下内置对各UPX版本的第三方图形化界面UPXShell工具,可以方便的切换版本,通过go按钮,可以切换upx加壳版本与脱壳版本
1 程序运行先从壳代码运行,壳代码执行完之后会跳转到真正的OEP,也就是是说第一步,首先要找到真正的OEP
但是长跳转只限于 段间跳转. 也就是一个段中. 因为在一个段中. 最后的偏移 加 段描述符.base才能构成真正的跳转地址.
之前是逐条push和pop,后来在网上看到更简洁的方法:pushad(机器码是:0x60),popad(机器码是0x61),一次性保存和恢复所有寄存器。
Inline hook是直接在以前的函数替里面修改指令,用一个跳转或者其他指令来达到挂钩的目的。这是相对普通的hook来说,因为普通的hook只是修改函数的调用地址,而不是在原来的函数体里面做修改。一般来说,普通的hook比较稳定使用。inline hook 更加高级一点,一般也跟难以被发现。ring3的Inline hook在之前已经实现过了,再看看ring0的Inline hook该如何实现。
程序会出现错误,如果到处用if(!fun())这样的形式来侦错的话,代码不好维护。
IATHOOK局限性较大,当我们想HOOK一个普通函数,并不是API,或者IAT表里并没有这个API函数(有可能他自己LoadLibrary,自己加载的),那我们根本就从导入表中找不到这个函数,自然也就在IAT表中无法找到,InlineHook算是对IATHOOK一个升级版吧
下面的所有资料 , 都可以在博客资源 https://download.csdn.net/download/han1202012/31843542 中下载 ;
align 字节对齐 , db 声明字符 / 字符串 , nop 空指令 cmp 比较 , test 比较 call 子函数调用指令 , jmp 跳转指令 ( 可选参数 a , b , c , g , l , o , p , s , z , e , n) lea 加载指令 , lds , les , lfs , lgs , lss , mov 数据传送指令 push 入栈指令 , pop 出栈指令 , pushf , popf , pushd , popd , pushad , popad , pusha , popa ret , retn 返回指令 , set 设置目标值指令 add , sub , mul , div 数值运算指令 xor , not , shl , shr , sal , sar , rol , ror , rcl , rcr 位运算指令
SHA256:4354970ccc7cd6bb16318f132c34f6a1b3d5c2ea7ff53e1c9271905527f2db07
* 本文原创作者:与非门salome,本文属FreeBuf原创奖励计划,未经许可禁止转载 首先,在windows10下编写一个具有一定安全机制但又存在漏洞的程序作为实验。接着通过一定的分析,编写出能够成功反弹shell功能的漏洞程序。 值得说明一下的是,本次的实验环境是Windows10 x64版本,漏洞程序为32位程序,关闭gs代码生成选项(以便去除干扰文章重点rop的因素),开启DEP (数据执行保护)。 首先需要说明几个概念以及本文的意义。DEP基本可以理解为让能够执行代码的内存区域
以前在逆向分析的时候,遇见VMP的代码就束手无策,只能跳过。最近在分析的时候又遇见vmp,准备研究一下。我这次遇见的VMP用查壳工具看是VMProtect(1.60-2.05)[-]。所以本次选用的壳版本是VMP1.8
https://www.freebuf.com/column/157939.html
上述指令执行时 , eax - ebx , 减法运算结果影响标志位 CPAZO ;
push 0 就是把0存入堆栈的顶部,这样的话栈窗口最顶的值成了00000000而其他的没有变化
文章首发奇安信攻防社区:https://forum.butian.net/share/1361
内存中是分页的 , 如果要记录每一块内存的使用状况 , 需要占用很大的内存空间 , 为了方便系统中内存的使用与记录 , 首先将操作系统分页 , 只需要记录每个分页的使用情况即可 , 每个分页只有 使用 / 没有使用 两种状态 ; 如果有
call 指令是 子函数调用指令 , 调用的指令的下一条指令地址入栈 , 会自动跳转到 子函数 目标地址中 , 该地址可能存储在寄存器中 , 也可能是一个常量 ;
align 字节对齐 , db 声明字符 / 字符串 , nop 空指令 cmp 比较 , test 比较 call 子函数调用指令 , jmp 跳转指令 ( 可选参数 a , b , c , g , l , o , p , s , z , e , n) lea 加载指令 , lds , les , lfs , lgs , lss , mov 数据传送指令 push , pop , pushf , popf , pushd , popd , pushad , popad , pusha , popa ret , retn , set add , sub , mul , div xor , not , shl , shr , sal , sar , rol , ror , rcl , rcr
本次实验内容:本次实验将接触到Call调用这个概念,什么是Call调用? Call相当于你在编程时所编写的函数,而高级语言中的函数最终也是会被编译器转换为汇编格式的Call调用,这些关键Call普遍都
5.1 汇编语言指令格式 为了介绍指令系统中指令的功能,先要清楚汇编语言是如何书写指令的,这就象在学习高级语言程序设计时,要清楚高级语言语句的语义、语法及其相关规定一样。
键盘,咱们做计算机这一行的自然不必多说,天天与它打交道。但熟归熟,清楚键盘背后的原理吗?键盘上都标有各键的名称,表明了各键所代表的意义,但是计算机是如何知道的?组合键是怎样实现的?按下一个代表字符的键,怎么变成平常使用的ASCII码的?
在上篇文章中 《VC 不同版本代码注入的区别》 ,我们想要对目标进程进行代码的注入,由于 Debug 版编译生成的代码和 Release 版编译生成的代码有些不同(Debug 版编译后,调用函数时会有一条 jmp 指令,而 Release 没有),因此,通过 #ifdef 这样的宏来区别 VC 是以 Debug 版方式编译,还是通过 Release 版方式编译,从而编译不同的代码来针对不同的版本进行了处理。代码如下:
写完上面的代码后,直接运行它进行代码注入,然后目标进程没有报错退出了。VC 默认使用 Debug 版编译,我就换 Release 版编译后,进行代码注入,想要的功能实现了,目标进程没有报错,没有退出。
简易 ShellCode 虽然可以正常被执行,但是还存在很多的问题,因为上次所编写的 ShellCode 采用了硬编址的方式来调用相应API函数的,那么就会存在一个很大的缺陷,如果操作系统的版本不统一就会存在调用函数失败甚至是软件卡死的现象,下面我们通过编写一些定位程序,让 ShellCode 能够动态定位我们所需要的API函数地址,从而解决上节课中 ShellCode 的通用性问题。
在文章Backdooring PE Files with Shellcode中介绍了一种在正常程序中注入shellcode的方式,让程序以前的逻辑照常能够正常运行,下面复现一下并解决几个小问题。
童年回忆系列。小时候特别喜欢玩这类游戏,软件不大,很慢的网速也不会下载太久,然后对配置要求不高,很破的电脑也可以玩得很开心。不过也有糟心的时候啊,大鱼太多,无数次死于挑战咬梭子鱼的尾巴……今年最后一天,就休闲一小会吧。
UPX、ASPack、Petite、WinUpack(Upack)、Themida
movs指令的作用 主要使用了串操作指令movs指令 [esi] 拷贝->[edi] ecx计数 rep重复.
《植物大战僵尸》这个游戏中想让僵尸走慢一点,方法挺多的,可以使用冰冻豌豆射手,也可以使用玉米投手,也可以使用冰川菇。这里使用玉米投手的奶油,让僵尸走的慢些。
挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝到里面去,然后修改目标进程EIP使其强行跳转到我们拷贝进去的相关机器码位置,执行相关,然后跳转回来。下面的例子是实现DLL注入,但是和平时说的远程代码注入在注入的逻辑上不同,但是同时都是用到了一个重要的结论就是:很多系统dll的导出函数地址在不同进程中,是一样的.
在软件的破解过程中,经常会遇到程序的自效验问题,什么是自效验?当文件大小发生变化,或者MD5特征变化的时候就会触发自效验暗装,有些暗装是直接退出,而有些则是格盘蓝屏等,所以在调试这样的程序的时候尽量在虚拟机里面进行吧。
在代码运行时需要临时存放各种信息,例如函数调用时的输入参数,局部变量等,这些信息存储在一种叫做”栈“的数据结构上。它的特点是后进先出,也就是最后存储到栈里面的数据将会最先被取出来。X86体系自带栈结构,寄存器ESP,EBP专门用于对栈进行操作。EBP指向栈所在的内存地址,ES[图片上传中…(截屏2020-09-30 下午3.56.59.png-a3f002-1601452956326-0)] P指向数据进入或弹出堆栈所在的位置,同时对于栈操作的指令有push,pop,call,leave,enter,ret等。
闲着也是闲着,在逆向某软件时深入了解了下ESP定律,然后就想写个文章记录并分享下。
植物大战僵尸这款游戏可以说是很多90后的回忆了,基本上只要是90后或多或少的都接触过,而玩游戏与制作辅助是两个概念,今天我将给大家分享一些游戏辅助方面的制作技巧,之所以使用植物大战僵尸这款游戏是因为游戏简单容易分析,且不需要考虑驱动保护版权等相应的问题,这里我会把我的分析思路分享出来,来供大家参考。
之前看到的UPX脱壳文章都只是教了方法,对UPX的原理少有提及。看了《逆核》的UPX脱壳一章后,俺尝试把UPX脱壳与PE文件结构的知识结合起来整理了一些(也可联系压缩器Paker的知识)。 分析样本来自BUUCTF:Reverse题目“新年快乐”(本文将寻找样本的OEP)
•物理机OS:Windows 10 20H2 x64•物理机WinDbg:10.0.19041.685•虚拟机OS:Windows 7 SP1 x86(6.1.7601.17514)•VMware:VMware Workstation 15 Pro•Visual Studio 2019
前两节中介绍了通过远线程进行注入的方法。现在换一种方法——修改进程入口点。(转载请指明出处)
在前文《不传之密:杀毒软件开发,原理、设计、编程实战》中,讲述了基于特征码的杀毒软件开发。本文作为继章,将继续介绍杀毒软件开发:感染型病毒的查杀。
本文基于 anhkgg 大佬的文章《微信 PC 端技术研究(2)-拿下语音》,原文链接:
领取专属 10元无门槛券
手把手带您无忧上云