逆向基础——软件手动脱壳技术入门

发布时间:2018-03-08 脱壳 逆向

YHZX_2013 · 2015/09/07 14:06

这里整合了一下之前自己学习软件手工脱壳的一些笔记和脱文,希望能给新学软件逆向和脱壳的童鞋们一点帮助。

1 一些概念

1.1 加壳

加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段。加壳过的程序可以直接运行,但是不能查看源代码。要经过脱壳才可以查看源代码。

加壳是利用特殊的算法,对EXEDLL文件里的资源进行压缩、加密。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。它们附加在原程序上通过Windows加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译。

壳的类型通常分为压缩壳和加密壳两类。压缩壳的特点是减小软件体积大小,加密保护不是重点。加密壳种类比较多,不同的壳侧重点不同,一些壳单纯保护程序,另一些壳提供额外的功能,如提供注册机制、使用次数、时间限制等。

1.2 OEP

OEP:(Original Entry Point),程序的入口点。软件加壳一般隐藏了程序真实的OEP(或者用了假的OEP), 我们需要寻找程序真正的OEP,才可以完成脱壳。

一般加壳程序在使用Ollydbg等动态调试工具时,会停在壳的预处理块。即处在对于程序原始代码块的解压或解密操作之前,在运行完程序自脱壳模块后,会停留在程序加壳之前的OEP位置,此时是dump程序的最佳时期。脱壳时在真实OEP处下int3断点,就可以捕捉到程序代码段完全恢复的状态。因此,寻找加壳程序的正确OEP,也成了手动脱壳时的第一要务。

1.3 IAT

IAT:(Import Address Table),导入地址表。由于导入函数就是被程序调用但其执行代码又不在程序中的函数,这些函数的代码位于一个或者多个DLL中。当PE文件被装入内存的时候,Windows装载器才将DLL 装入,并将调用导入函数的指令和函数实际所处的地址联系起来(动态连接),这操作就需要导入表完成。其中导入地址表就指示函数实际地址。 多数加壳软件在运行时会重建导入地址表,因此获取加壳程序正确的导入地址表也是手动脱壳操作中的一个关键问题。

2 一些脱壳方法

2.1单步跟踪法

单步跟踪法的原理就是通过Ollydbg的单步(F8)、单步进入(F7)和运行到(F4)功能,完整走过程序的自脱壳过程,跳过一些循环恢复代码的片段,并用单步进入确保程序不会略过OEP。这样可以在软件自动脱壳模块运行完毕后,到达OEP,并dump程序。

2.2 ESP定律法

ESP定律法是脱壳的利器,是应用频率最高的脱壳方法之一。

ESP定律的原理在于程序中堆栈平衡的合理利用。由于在程序自解密或者自解压过程中,不少壳会先将当前寄存器内容压栈,如使用pushad,在解压结束后,会将之前的寄存器值出栈,如使用popad。因此在寄存器出栈时,往往程序代码被自动恢复,此时硬件断点触发。然后在程序当前位置,只需要少许单步跟踪,就很容易到达正确的OEP位置。

2.3内存镜像法(二次断点法)

内存镜像法是在加壳程序被加载时,通过ODALT+M快捷键,进入到程序虚拟内存区段。然后通过加两次内存一次性断点,到达程序正确OEP的位置。

内存镜像法的原理在于对于程序资源段和代码段下断点,一般程序自解压或者自解密时,会首先访问资源段获取所需资源,然后在自动脱壳完成后,转回程序代码段。这时候下内存一次性断点,程序就会停在OEP处。

2.4一步到达OEP

所谓的一步到达OEP的脱壳方法,是根据所脱壳的特征,寻找其距离OEP最近的一处汇编指令,然后下int3断点,在程序走到OEP的时候dump程序。 如一些压缩壳往往popad指令距离OEP或者Magic Jump特别近,因此使用Ollydbg的搜索功能,可以搜索壳的特征汇编代码,达到一步断点到达OEP的效果。

2.5最后一次异常法

最后一次异常法的原理是,程序在自解压或自解密过程中,可能会触发无数次的异常。如果能定位到最后一次程序异常的位置,可能就会很接近自动脱壳完成位置。现在最后一次异常法脱壳可以利用Ollydbg的异常计数器插件,先记录异常数目,然后重新载入,自动停在最后一次异常处。

2.6 模拟跟踪法

模拟跟踪法的原理就是使用Ollydbg下条件断点,SFX相当于是一个自解压段,在自解压段结束时(eip的值转到代码段时),已经距离OEP很近,但是这种跟踪方法会比较耗时。

2.7 “SFX”法

SFX”法利用了Ollydbg自带的OEP寻找功能,可以选择直接让程序停在OD找到的OEP处,此时自解压已经完成,可以直接dump程序。

3一些脱壳实践

下面给出整理的使用以上方法,自己尝试手动脱这几种常用壳的脱壳笔记。

3.1UPX脱壳笔记

首先进行侦壳:

首先把程序扔到OllyIce里面可以看到:

然后这里尝试使用ESP定理:即在ESP第一次改变时,对ESP的地址设置硬件字访问断点,这样可以在代码被UPX算法还原之后,跳转到程序的正常入口处。

然后F5运行,并没有直接到跳转到程序入口处的大跳位置,但是可以看到UPX的大跳就在眼前:

所以被还原后的程序入口点就是0x00445151(通过单步往下走,F4略过往回走的循环语句,也可以看到这个大跳的位置。)接下来走到大跳位置,跳到正常程序入口处:

然后去掉硬件断点,并使用LoadPEdump功能dump目标程序:

先修正映像大小,然后再选择完整脱壳,这样可以得到第一步dump的程序,然后再使用ImportREC修复dump程序的OEPOEP的信息通过OD自带的dump功能查询或者直接填45151

将正确的入口地址填入ImportREC中,然后自动搜索IAT信息:

然后点击获取输入表得到修正IAT之后的程序函数输入表,然后再点击显示无效函数,愉快地发现没有无效函数,那么就可以直接修复转存文件了。

选择刚刚第一步dump下来的转储文件进行修复,修复完成之后脱壳完成:

这里对于压缩壳UPX,直接使用了ESP定律,可以很方便找到OEPdump程序。

4.2 tElock脱壳笔记

这里脱的是一个tElock的壳:

1、先使用最简单的最后一次异常法: 首先把程序扔到OllyIce里面设置OD调试选项中的异常选项,

仅保留内存非法访问异常,然后使用异常计数器插件,在使用前要清空断点设置:

等到程序正常运行后,重新加载程序,再选择第二步,停在最后一次异常之前:

然后用Alt+M转到内存窗口,对主程序code段下内存断点,SHIFT+F9执行:

这样程序就中断在了正确的OEP处,可以选择从模块中删除分析以显示正常分析的汇编代码。然后使用LoadPE dump程序,并修正程序映像大小。但是在使用ImportREC v1.6F Fix版,输入正确的OEP,获取函数输入表信息时,会发现无效的指针。使用方法一修复后,再使用方法三可以完全修复:

再点击Fix dump,可以修复之前dump下来的程序,脱壳完成:

2、使用二次内存断点法: 首先载入程序,将所有的异常类型忽略,然后在idata段设置内存断点, 然后SHIFT+F9

停下来后再次在code段设置内存断点,再次SHIFT+F9执行,可以直接达到正确的OEP中:

然后LoadPE dump,然后修复IAT。修复方法同方法1。

3、寻找magic jump以及修复函数表完成后dump程序: 前两步还是加内存断点(idatacode),然后定位到程序的正确OEP

然后如果这时使用LoadPE dump后修复,就和前两种一样了。这里先是使用ImportREC获取函数输入表第一个位置的指针地址。

然后得到函数指针偏移地址在0x005512C,加上基地址后为0x045512C,这时在该位置下硬件访问双字断点。再重新SHIFT+F9忽略异常执行后,由于下了断点,会触发tElockCRC校验错误:

所以这里要先绕过CRC校验,才能成功执行到硬件断点位置,所以首先暂停程序,然后使用Alt+F9返回用户代码。点击确定按钮后,程序暂停在调用ExitProcess的位置:

现在要向上找一找能跳过这个退出的跳转(CRC判断跳转),然后进行修改并跳过:

找到了应该修改的位置,但是如果修改之后重新运行是会被恢复的,所以先记下来这个跳转的地址,0x00469622。重新运行之后,在idata断设置内存断点,SHIFT+F9停下后,再Ctrl+G找到修改点再修改。修改完之后再设置之前的硬件断点,这样不会触发CRC校验错误了。

无数次的SHIFT+F9之后,在寄存器窗口可以看到指针以及能够正常显示:

然后此时F8单步,找magic jump……看小生大大的视屏是通过分析疑似CRC跳转得到magic jump的位置:

这里记下来magic jump的地址是0x0046973B,然后清空udd文件,删除硬件断点,再次重新运行程序,然后在idata下内存断点停住,然后Ctrl+G找到magic jump位置处,修改跳转:

然后在code段下内存断点:

然后SHIFT+F9执行,停下来就到了OEP的位置:

这时候再dump程序,IAT表已经被修复,可以直接获得脱壳版程序:

这里尝试使用了另外两种脱壳方法,并且通过预先找OEP的方式,修复了CRC校验后,直接dump到了IAT被修复了的程序。

3.3 PEncrypt脱壳笔记

首先进行侦壳:

先把程序扔到OllyIce里面,然后程序停在这里,看起来蛮怪的:

好吧,重新加载程序,尝试使用最后一次异常法,不忽略所有异常,然后使用异常计数器插件,程序停在最后一次异常处:

如果此时F8单步下去,程序会触发异常处理,然后又到不了OEP了。这时需要看一下堆栈数据情况:

这时需要在0040CCD7F2下断点,然后SHIFT+F9执行,可以跳过这个坑:

然后接下来就是F8+F4的操作,一路直到OEP

LoadPE脱壳,然后用ImportREC修复后,虽然没有无效指针,但是还是不能运行:

这时候用LoadPE的重建PE功能:

然后就可以正常运行了:

这个壳使用了单步跟踪的脱壳方法,一路跳过程序“陷阱”,最后达到OEP。并且使用了LoadPE的重建PE功能,对程序进行了重建,最终完成了这个加密壳的脱壳全过程。

3.4 FSG变形壳脱壳笔记

首先进行侦壳:

使用ESP定律,首先把程序扔到OllyIce里面,F8单步走,观察ESP变化,在ESP第一次发生变化时,对ESP对应的地址处设置内存硬件访问WORD断点,然后SHIFT+F9运行,在程序停下来之后,取消硬件断点,进行F8单步:

F4略过向后的跳转(循环),然后继续往下找,一直到这里:

在这个jmp下面F4,程序会跑飞。说明程序代码在这个循环中就已经释放完毕,所以向上找找这个循环中有没有带条件的大跳。这样很容易找到magic jump的位置,然后我们Enter或者Ctrl+G00402666的位置,发现果然是OEP,重新分析,然后F2下断点,让程序走到OEP

如果是FSG1.33,直接使用LoadPE dump文件,然后使用ImportREC修复,就可以正常脱壳了。但是这里在使用ImportREC修复时,会出现一个无效指针:

这里直接剪掉(或者删掉)这个指针,然后修复转存文件,发现无法正常打开:

然后再把修复后的程序,丢到OllyIceF9直接运行:

这里是变形壳添加的一个暗桩,会导致程序出现异常退出,这里直接nop掉或者把之前的jle(校验)改成jmp,然后保存修改另存文件。然后就可以运行了

4 参考

【百度百科(各种概念)、自己之前的脱文……】 另附一篇脱壳步骤汇总: www.52pojie.cn/thread-2599…

更多相关推荐


Android so中系统调用方法总结

发布时间:2018-11-27 ANDROID 逆向 ANDROID逆向 安全 系统调用
android中经常通过调用系统函数open等打开/proc/pid/maps检测自身是否运行于VirtualApp或者被注入。现将android下关于内核函数的调用的几种方法总结如下,欢迎补充。1、直接导入调用系统函数调用库函数,包括open、fopen等2、dlsym间接调用通过*open_addr=dlsym(RTLD_DEFAULT,“open”)*获得函数地址进行调用。3、SVC中断系统...

dex组成

发布时间:2019-10-10 逆向
作为记录,引用大佬的文章https://blog.csdn.net/p312011150/article/details/80501690...

C++ 逆向辅助学习----汇编基础 指令集合所有指令 7

发布时间:2020-04-11 MFC 逆向 教程
九、汇编减法指令sub   1.sun指令     减法指令sub(subtract)     格式:sub操作数A,操作数B     A=A-B      功能:两个操作数的相减,即从A中减去B,其结果放在A中         ZF零标志位:若当前的运算结果为零,则ZF为1,否则为0     注意:SUB指令影响ZF标志位    十、CMP和转移指令   1.比较指令CMP      格式:CM...

游戏逆向 修改植物大战僵尸阳光值

发布时间:2021-06-25 网络安全 游戏 逆向
CheatEngine游戏逆向学习web渗透过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。——修改植物大战僵尸阳光值——首先打开植物大战僵尸和CheatEngine,并且选择植物大战僵尸进程。搜索阳光值,目前为50。可以看到搜索结果有很多,更改游戏内的值,进行再次搜索。选择结果,更改值,可以看到游戏中阳光数量发生了变化。查看是什么在查看这个地址,双击后可以看到偏移量为...

django逆向生成模型

发布时间:2020-07-09 DJANGO 逆向
django逆向生成模型pythonmanage.pyinspectdb#使用这条命令,会根据设置的数据库中的表在自动生成对应的Model代码,并打印出来pythonmanage.pyinspectdb>student/models.py#前提是创建了app(student)并且在setting.py文件中注册过...

攻防世界逆向高手题之testre

发布时间:2021-09-03 逆向 CTF
攻防世界逆向高手题之testre继续开启全栈梦想之逆向之旅~这题是攻防世界逆向高手题的testre下载附件,照例扔入exeinfope中查看信息:64位ELF文件,无壳,照例扔入IDA64中查看伪代码,有main函数看main函数:主函数就两个自定义函数,按顺序跟踪第一个sub_400D00函数。(这里积累第一个经验)v6是字符数组,v5是17uLL,限定了v6接受输入字符的长度,就是flag的长...

国家税务总局全国增值税发票查验平台网站js逆向分析及全逆向算法还原

发布时间:2022-04-18 学习 逆向 JS
本文教程针对的是2021年7月2日时国税查验平台的js分析,其中版本号为V2.0.06_009。主要分析内容为key9和flwq39以及fplx这3个参数的算法,其中key9分为获取验证码阶段和查验阶段,算法有所区别,flwq39同理。教程开始:一、官方网址国家税务总局全国增值税发票查验平台二、请求分析国税查验平台请求共分为2个,第一个请求获取验证码,第二个请求为输入验证码后查验数据并返回发票详细...

Xposed Hook 魔趣列表动画 xuimod

发布时间:2020-12-29 ANDROID XPOSED 逆向
当年感觉魔趣的列表动画挺有意思,后来发现xuimod这个xposed模块,玩过一阵,现在已经这么些年没更新了,既然没人,那我就自己尝试写写吧。少废话,先看成品还有个京东APP的图传不上,CSDN不允许外链,强制上传到他们的服务器。代码:github基础方法注意点ClassCastException尝试将一个变量强转为想要的类型时,例如我强转hook来的obj类型的变量为RecyclerView,这...

Detour重要函数,随手记

发布时间:2022-03-26 逆向 DETOURS
Detours学习之七:Detours示例程序构建_jyl_sh的博客-CSDN博客Detours示例程序构建要构建示例应用程序,请在samples目录中键入nmake。注意,为了使用许多其他示例程序,必须构建setdll和syslog示例。每个样例目录都有一个测试,可以通过键入nmaketest调用它来演示样例的用法。除了极少数例外,所有的.exe程序也接受/?命令显示使用信息。跟踪示例通过sy...

AndroidStudio编译so库

发布时间:2020-07-16 ANDROID 逆向
步骤1.新建工程com.example.jnitest2.新建JniTest.java(MainActivity同级目录下)packagecom.example.jnitest;publicclassJniTest{static{System.loadLibrary("JniTest");}publicnativestaticStringgetString();}3.Build->MakeP...

Windbg设置入口函数DriverEntry断点

   Windows驱动程序加载的入口函数为DriverEntry,通过调试该函数,很容易可以找出驱动程序的派遣函数,接着可以调试分析自己感兴趣的IRP。但是,首先,需要在windbg中设置断点,使得驱动程序加载的时候可以执行单步调试。这里有2种办法可以尝试。   第一种方法,直接通过计算驱动程序的入口地址,下断点即可。比如有些第三方驱动程序,可能会动态加载或者卸载,但是很多时候,再次加载的时候驱...

抖音x_gorgon生成算法

发布时间:2021-12-02 爬虫 逆向 PYTHON
目前有0404、8404、0300的,支持安卓和ios端,可以生成x-gorgon及相应的x-khronos,以供当次请求使用生成结果:带着这两个参数,就可以愉快的采集数据了,记得控制频率哦,防止被风控博主目前学习测试了 热榜、推荐、搜索等,还是很稳定的...

抖音X_Gorgon

发布时间:2020-06-19 逆向
最近有人让我爬一下抖音,算法做出来了没有人要了,谁要联系一下。出不起价格的就不要加我了,加了说两句话也没什么意思。爬取个性签名,视频,点赞,关注,都可以。qq657589436免责声明请勿使用本服务于商用请勿使用本服务大量抓取若因使用本服务与抖音官方造成不必要的纠纷,本人盖不负责我也不知道这个东西有没有法律风险,存粹技术爱好,若侵犯抖音贵公司的权益,请告知...

安卓逆向学习----apk重打包和签名

发布时间:2019-12-02 逆向 APK 重打包 安卓 签名
1.apktooldWandoujia.apk反编译为smali,dex2jar和jd-gui可以看到java级别的源码,这里只考虑smali语言。res/values/strings.xml中有字符串资源,索引值在同目录下的public.xml中全局搜索id可以确定字符串在何处使用。这些资源在开发时在gen/<packagename>/R.java文件的string类中被标识2.对a...

Android逆向之CrackeMe系列------01

发布时间:2019-12-26 ANDROID逆向之CRAKEME系列 ANDROID 逆向
APK概述:*CrakeMe01是一个切水果游戏apk。特此声明:*本文只是用来学习使用,禁止用于商业或其他用途,违者后果自负!*游戏主界面***游戏右上角有个大礼包,点击购买可以获得5个时间沙漏和鲜果盛宴。这里我用真机来测试,首先开启飞行模式。 *点击购买后,提示失败等信息。分析工具*AndroidKillerV1.3.1.0*apktool2.4.1*dex2jar2.1*jd-jui1.6...

DDms录制轨迹,追踪方法

发布时间:2018-06-29 DDMS录制轨迹 ANDROID逆向 逆向
为了提高Android逆向分析效率,发现ddms居然有如此强大的功能,其工具就在sdk包中就有\sdk\tools\ddms.bat1.打开ddms,连接到对应调试设备,这里推荐用模拟器,真机需要设置调试debug模式2.3.4.至此我们录制轨迹成功,开始尽情分析吧,分享是种美德,共同学习进步.........

Method Profiling

往期推荐方法栈跟踪Log插桩调试smali代码DDMS工具使用快速定位关键代码Smali文件详解一:MethodProfiling定义主要用于热点分析和性能优化。除了可以记录每个函数占用的CPU时间外,还可以跟踪所有的函数调用关系,并提供比栈跟踪法更详细的函数调用序列报告。二:分析“好搜小说大全”登录功能今天我们以“好搜小说大全.apk”文件作为案例,打开“好搜小说大全.apk”,点击APP程序主...

android逆向之路十六

发布时间:2018-05-15 逆向
我们破解完一个软件之后,我们都想要有些自己的破解版权,毕竟破解不易嘛,现在我们来弄弄怎么在软件上弄出一个弹窗,让别人知道是你破解的,当然,装逼无限了。首先我们都在xml文件里找到第一个activity,然后记住它的名字,从dex文件进入,进入到它的一个oncreat方法,然后复制粘贴一下代码,改成自己想要发出的弹窗信息即可。 new-instancev0,Landroid/app/AlertDia...

用Androguard静态检测APK行为:收集手机号

1.引入有些APK运行后,会收集你的手机号。有收集手机号这种行为的APP,就有可能把你的手机号泄露出去。那么,如何用一段python代码,来检测APK是否有这种收集手机号的行为呢?2.原理从参考1中,我们可以知道,只要你写APP时,满足如下两个条件,就会让你的APP有收集本机手机号的行为。在manifest中添加如下权限<uses-permissionandroid:name="androi...

linux-inject:注入代码到运行的Linux进程中

发布时间:2016-08-05 LINUX 逆向
最近,我遇到了linux-inject,它是一个注入程序,可以注入一个.so文件到一个运行中的应用程序进程中。类似于LD_PRELOAD环境变量所实现的功能,但它可以在程序运行过程中进行动态注入,而LD_PRELOAD是定义在程序运行前优先加载的动态链接库。事实上,linux-inject并不取代任何功能。换句话说,可以看成是忽略了LP_PRELOAD.它的文档很匮乏,理由可能是开发人员认为大多数...

Windows消息钩取

发布时间:2018-06-13 逆向工程核心原理 WINDOWS 逆向
Windows消息钩取简单地说,消息钩取就是偷看、截取信息。常规Windows消息流:1、发生键盘输入事件时,WM_KEYDOWN消息被添加到[OSmessagequeue];2、OS判断哪个应用程序中发生了事件,然后从[OSmessagequeue]中取出消息,添加到相应应用程序的[applicationmessagequeue]中;3、应用程序监视自身的[applicationmessageq...

DLL注入方式

发布时间:2015-03-27 WINDOWS 逆向
方法一、安装钩子:1、运行A.exe,A.exe中调用SetWindowsHookEx(或将Set放入my.dll的导出函数中,此处调用该导出函数)进行钩子安装;2、运行B.exe,当向B.exe发送相应消息时,钩子勾取消息,并调用钩子过程(位于my.dll文件中),调用钩子过程时系统便会强制将dll注入到B.exe中。方法二、远程线程:1、运行A.exe,直接调用CreateRemoteThre...

逆向寻找MFC程序中消息回调函数地址

发布时间:2020-06-03 逆向
用IDA打开exe文件,在Imports表中找到GetCommandMap函数,两次交叉引用,找到GetCommandMap在rdata数据段中的位置。GetMessageMap函数就在它上面地址401250处代码如下地址403618处数据如下根据下面的源码,知道403540这里就是真正的函数地址MFC中消息定义格式如下在IDA中加入这个结构图地址403540的数据按照结构体解析如下 和代码中一样...

逆向学习-DLL注入

发布时间:2019-04-30 DLL 逆向
DLL注入技术,可以实现钩取API,改进程序,修复Bug。DLL注入指的是向运行中的其他进程强制插入特定的DLL文件。DLL注入命令进程自行调用LoadLibrary()API,加载用户指定的DLL文件。DLL(DynamicLinkedLibrary,动态链接库)  DLL被加载到进程后自动运行DllMain()函数,用户把想执行的代码放到此函数,加载DLL时,代码会被执行。DLL注入的实现方法...

破解安卓软件中金币数量的限制以及反编译安卓软件的思路

发布时间:2013-06-13 ANDROID 逆向 破解 反编译 手机
依然是我们信息安全大赛的题目,那道题给了一个安卓APK程序,安装完毕后打开有一个你当前的金币数,你需要修改你拥有的金币数到所需要的数量购买题目的key,修改到所需金币数后购买key,即可达到题目的要求,获得key。既然是修改金币的数量,那在这个程序中肯定会有一个比较大小的语句。如果是某些安卓软件的功能限制,那我猜测一般应该是某些功能被该软件默认设置为“false”,或者是把功能限制的语句设置为“t...

修改包名实现分身

往期推荐、篡改Apk名称、图标AndroidKiller介绍与使用什么是虚拟机?虚拟机有那几种APK安装流程及详细步骤APK打包流程所谓分身,就是在同一设备上可以同时打开两个或多个相同的APP。那么如何修改APK包名,就是本次要分享的内容,这里以土豆视频为例。1.1修改APK包名1.首先,找到包名:在工程管理器中找到“AndroidManifest.xml”文件,双击打开,找到“manifest”...

安卓逆向(一)Android Killer使用与配置

发布时间:2020-09-01 ANDROID 逆向
软件介绍:AndroidKiller是一款可视化的安卓应用逆向工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一身,支持logcat日志输出,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;吸收融汇多种工具功能与特点,打造一站式逆向工具操作体验,大大简化了用户在安卓应用/游戏修改过程中的各类繁琐工作。...

frida rpc算法转发

发布时间:2022-03-19 逆向 安卓逆向
fridarpc算法转发前言Hello,大家好,我是Tian翊本章来给大家介绍一个爬虫利器,嗯。。。,app协议还原利器更合适,当然,自己用的话是利器,别人用是折磨因为它需要依赖模拟器或手机。对于环境来说是有些麻烦的!这个东西我们一般称他为fridarpc算法转发为什么使用rpc算法转发我们都知道现在开发app主流的方案是Java,一些中大厂app是Java+C++,C++最后生成的是so,是ar...

Android逆向 破解第一个Android程序

发布时间:2018-11-21 ANDROID 逆向
Android逆向破解第一个Android程序  这节正式开始破解编写的第一个Android工程,打开AndroidKiller,把第一节自己编写的Androidapk拖入AndroidKiller。PS:如果AndroidKiller不能编译成APK,或者反编译失败,应该是apktool等工具版本低了,参见AndroidKiller高版本反编译失败解决。把APK拖到AndroidKiller界面...

x86_64汇编中的栈平衡(内平栈外平栈)附od反汇编图解

发布时间:2021-11-06 栈平衡 汇编 逆向 外平栈 PUSH 内平栈
本文结合反汇编pc版植物大战僵尸,讲解游戏暂停后恢复call的过程首先介绍栈空间用到的寄存器ESP栈顶指针(extendedstackpointer)英文直译是:扩展栈指针EBP栈底指针,指的是本层call子程序的栈底,就是最上层call的栈底。不是整个栈空间的栈底(extendedbasepointer)英文直译是扩展基址指针push入栈(给call穿参数)pusheax等价于subesp,4m...

iOS逆向-day1:逆向内容的简介与越狱环境搭建

发布时间:2019-04-13 逆向 IOS
总体内容1、逆向课程简介2、学习逆向的条件3、iOS越狱(iOSJailbreak)的优点和缺点4、完美越狱和非完美越狱以及如何判断是否越狱成功?5、Cydia(越狱后的AppStore)6、iphone/Mac必备软件安装以及安装包7、代码判断设备是否越狱8、提高工作效率的工具一、逆向课程简介1.1、逆向总体图逆向课程简介1.2、学习逆向的效果:初级开发>高级开发>底层开发1.3、学...

运行时压缩(UPX)

发布时间:2018-06-07 逆向工程核心原理 逆向
任何文件都是由二进制组成的,因而只要使用合适的压缩算法,就可以是文件大小进行压缩。无损压缩:经过压缩的文件能完全恢复。如7-zip、面包房等压缩程序。有损压缩:经过压缩的文件不能完全恢复。压缩多媒体文件时大部分使用有损压缩。运行时压缩器:运行时压缩器(Run-TimePacker)是针对可执行文件而言的,可执行文件内部含有解压缩代码,文件在运行瞬间在内存中解压缩后执行。运行时压缩文件也是PE文件,...

upx脱壳(手动)

发布时间:2019-08-28 UPX 脱壳
1.upx脱壳几乎可以算是最简单的了,第一步还是查壳2.第二步当然是od打开,提示解析代码,是和否都可以,然后f8,打硬件断点。3.此时再f9执行到硬件断点,可以看到popad,壳代码到这基本上结束了,后面就是oep。在下面的一个大跳jmp处断点,然后取消硬件断点,f9到断点。4.然后f8过去,可以看到如下画面。此处作为oep,可以开始进行脱壳5.右键——使用od调试进程6.复制修正地址,取消勾选...

攻防世界逆向高手题之BabyXor

发布时间:2021-09-28 CTF 逆向
攻防世界逆向高手题之BabyXor继续开启全栈梦想之逆向之旅~这题是攻防世界逆向高手题的BabyXor..下载附件,照例扔入exeinfope中查看信息,结果是不知名的壳,还叫我用DIE查看,结果也没分析出来:...(这里积累第一个经验)那没办法只能手动脱壳了,回顾以前的crackme题中积累的ESP脱壳定律,在这里也同样可以借鉴一二:https://blog.csdn.net/xiao__1ba...

样本调试之 loadlibrary 报错1114

发布时间:2022-03-25 逆向 操作系统
问题描述拿到了一份样本,却怎么也运行不起来,然后自己写了dll加载器进行调试,发现报错1114,网上很多相关资料没有。实在没有办法了,只能自己进入loadlibrary函数内部进行调试。关键点发现在报错之前执行了StrStrIA函数StrStrIA函数(shlwapi.h)查找字符串中第一次出现的子字符串。比较不区分大小写。注:shlwapi.h头文件将StrStrI定义为别名,它根据UNICOD...

Android Killer 反编译失败-aapt错误

aapt是sdk下build-tools文件夹中重要的一款反编译工具,aapt错误那么可能是jdk/sdk的路径没有配置正确 解决步骤一、在cmd命令窗口下依次输入如下命令,没有报错正常执行那么java环境没有问题javajavacjava-version 二、查看计算机-属性-高级系统设置-环境变量,path系统变量设置的java路径为E:\jdk\bin\在AndroidKiller配置选项里...

iOS开发学习路线

发布时间:2018-05-25 逆向 程序员 进阶 面试 IOS
  那么现在说正题,如何成为负责任的开发者?关注作者:点击关注二字可以找到大神组织首先要负责,对自己的项目负责。如果是自己新开的项目,要保证随时都能清晰的想到项目当中每个地方是怎么实现的,测试或者用户反馈了问题以后,能立马想到可能的错误原因。如果是接手的项目,就要尽快去了解主要的界面和功能是如何实现的。你只有先做好自己分内的事,才有机会去顾暇别人的事。1.保持一个良好的代码规范以及文件架构。2.每...

安卓逆向神器——AndroidKiller报错那些事

    最近两天在做安卓逆向的题,以前从来没接触过逆向,对安卓开发的认识也是相当肤浅,但是遇见安卓逆向,想要结果就要付出代价,不怂,干它就完事了。作为一个搞安全的时时刻刻都在接触以前没接触过的软件,没接触过的技术、知识……    从网上找来绿色版的AK,打开看看发现页面很清爽,插件也很多,功能指定很强大了(还没用,以后熟悉了写一篇介绍AK强大功能的博客)。让人感觉很舒服,貌似版本很老了,但是一点都...

Java层逆向分析-Dalvik字节码

往期推荐修改资源去广告修改包名实现分身篡改Apk名称、图标AndroidKiller介绍与使用1.1Dalvik寄存器Dalvik中的寄存器都是32位大小,支持所有类型。对于小于或等于32位类型,使用一个寄存器就可以了,对64位(long和double)类型,需要使用两个相邻的寄存器来存储。1.2寄存器的命名法寄存器就相当于一个个容器,在里面储存各类型值,为了很好地知道存储位置,就需要对寄存器进行...

iOS逆向基础动态库注入实现过程(三)

发布时间:2018-04-28 逆向 IOS
    在逆向过程,我们很多时候需要动态调试把自己的代码注入目标app,替换或拦截部分功能,那是如何实现将自己代码载入目标app从而hook的呢?今天我们聊下动态库注入的过程。        本文以ofo小黄车iOS为例一步步分析动态库如何注入目标APP,首先我们通过MachoOView查看ofo的MachO结构如下:可以知道程序默认加载了系统库Foundation、libobjc.A.dylib...

逆向过程中遇到加密算法怎么破?

发布时间:2020-07-15 逆向 加密算法
1、分析加密后的字符串特征:密码长度通常在12位以内,最多到16位,a)MD5是文本摘要算法,提取结果通常是32位,不受明文长度影响b)Base64编码结果末尾通常会出现一个或是二个等于符号,受明文长度影响c)一长串无规律数字与字母组合的字符大概率是AES、DES、SHA相关算法d)SHA1加密结果值为40位,不受明文长度影响e)SHA256加密值为64位,不受明文长度影响另外AES和RSA等对称...

逆向常见的算法

发布时间:2019-09-19 逆向
Base64对于Base64来说是我们通常比较常见的加密算法通常是应用动态页面开发或者是流媒体路径加密上对于我这样的菜鸡来说通常常见于Web题中但是在逆向题中也偶有见到Base64算法通俗的来讲就是将3个8位字节转换为4个6位字节在重新分配完6个字节后会在6位字节前部补0将字节补成八位也就是说此时字节最大值为00111111=63此时Base64算法会将此时的字节所代表的的十进制数作为下标来索引表...

ios逆向工具Class-dump的安装和导出.h文件的教程

发布时间:2022-02-08 CLASS DUMP 逆向 CLASS-DUMP IOS
官网地址class-dump-3.5.dmg的下载地址官网文件安装方法双击安装dmg文件以后把里面的class-dump文件,复制到/usr/local/bin/目录下,这样才能在终端的命令行里面输入class-dump命令.建议不要安装官网的有的程序会运行报错,直接安装下面这个版本运行报错CannotfindoffsetforaddressxxxinstringAtAddress:解决运行报错的...

(5)初识Mach-O

发布时间:2018-02-02 逆向 IOS开发 IOS
APP从开发到安装到手机的过程1MJRefreshExample.app中的MJRefreshExample文件是iOS中的可执行文件,文件格式是Mach-OAPP从开发到安装到手机的过程2逆向APP的思路界面分析Cycript、Reveal代码分析对Mach-O文件的静态分析MachOView、class-dump、HopperDisassembler、ida等动态调试对运行中的APP进行代码调...

学习iOS逆向有什么用?

学习iOS逆向有什么用?我们一般都是正向开发,那逆向开发有什么用呢?有助于深入理解iOS内部原理这个应该是很容易懂的,因为不懂内部原理的话,如何来逆向App呢。查看竞品,分析竞品例如你想做一款IM产品,就可以看下微信的数据库如何设计,各种类型的消息如何定义,收到不同类型的消息如何处理,有时候产品经理的一句参考微信,那你是不是无从下手了,其实都可以通过逆向进行了解的。修改已有APP的功能例如看个视频...

在ipa中注入动态库dylib并运行自己的代码

发布时间:2015-09-07 DYLIB 逆向 破解 IOS
最近接到一个需求,要求将自己写的dylib注入到别人的ipa中,在启动该程序后可以运行自己的代码。这个需求主要分为两部分,第一部分是注入dylib,第二部分是运行自定义代码。于是乎四处去找实现方案,对于第一部分一般都是事先将dylib手动放入 /Library/MobileSubstrate/DynamicLibraries/ 下,不符合我们的需求,最后找到了一个开源的mac工具:LibAhead...

逆向破解_iOS_学习笔记_1

监测工具Reveal、snoop-it、introspy反汇编工具IDA、Hopper 开发工具iOSOpenDev、Theos  OSX工具class-dump然而出现了权限问题:cp:/usr/bin/mvim:Operationnotpermitted搜索之后发现,是ElCapitan加入了Rootless机制,不再能够随心所欲的读写很多路径下了。设置root权限也不行。Rootless机制...