首页 > 其他分享 >KKrunchy脱壳

KKrunchy脱壳

时间:2023-11-09 20:34:28浏览次数:30  
标签:Scylla 修复 脱壳 KKrunchy IAT 断点

一. Kkrunchy介绍

KKrunchy属于压缩壳,常用于恶意代码的压缩保护。

KKrunchy [1] is a small executable packer intended for 64k intros. It does not try to pack DLLs and cannot handle exports or TLS. It performs a transform on the input code to allow it to compress better. It will fill uninitialized data sections with zeros and then pack them together with the rest of the code. KKrunchy is often used by malware authors to prevent AV analysts from reversing their code.

二. 脱壳思路

  1. In order to unpack KKrunchy, put a break point on LoadLibraryA. When the break point triggers, step the debugger and search for the initialization of the stack frame. Once the stack frame initialization is complete, dump the debugged process. The dumped process is the unpacked version of the executable.

    其实就是API断点的方法,通过在重要API上下断点,找到外壳程序载入DLL和导入函数的位置,来查找OEP的位置。

  2. ESP脱壳定理方法:使用寄存器状态恢复的原理,开始时外壳程序会将寄存器push入栈进行保存,然后当外壳程序执行完毕准备回到主程序前会将寄存器pop出栈恢复,在这里断住后再通过单步步入找到OEP。

三. 背景知识

1. 断点API函数

  1. LoadLibraryA函数

    HMODULE LoadLibraryA(
      [in] LPCSTR lpLibFileName
    );
    //将指定的模块加载到调用进程的地址空间中。
    
  2. GetProcAddress函数

    FARPROC GetProcAddress(
      [in] HMODULE hModule,
      [in] LPCSTR  lpProcName
    );
    /*
    [in] hModule
    
    包含函数或变量的 DLL 模块的句柄。 LoadLibrary、LoadLibraryEx、LoadPackagedLibrary 或 GetModuleHandle 函数返回此句柄。
    
    GetProcAddress 函数不会从使用 LOAD_LIBRARY_AS_DATAFILE 标志加载的模块中检索地址。 有关详细信息,请参阅 LoadLibraryEx。
    
    [in] lpProcName
    
    函数或变量名称,
    */
    

2.如何使用X_dbg当中的Scylla进行脱壳和IAT修复操作

DUMP文件

注意,dump时需要填写正确的原始OEP地址,然后点击Dump按钮保存文件。

保存完毕之后,最后就是修复文件了。

使用x64dbg脱壳之修复文件

修复文件,本质上就是修复IAT,所以还是使用插件Scylla,先对当前程序的IAT进行扫描,如果能找到就可以使用工具修复,不能就需要手动修复。

为了能更好的获取IAT,我们需要对插件Scylla进行设置。

  • 打开设置

  • 设置高级扫描

  • 查找IAT

  • 获取导入表

  • 修复上一节的dump文件

四. 脱壳步骤

使用ESP脱壳定律脱壳,通过Scylla修复

  1. 找到改变ESP寄存器内容的位置,下硬件访问断点

  2. F9运行,在相应断点处断下


    开始向下F8加F4查找OEP所在位置,始终向下执行,遇上向上跳转的指令越过即可。

  3. 顺利找到OEP,再使用Scylla进行DUMP修复,得到脱壳后的文件。


  4. 使用IDA载入,文件成功脱壳。

五. 参考文章

  1. Virus Bulletin :: Quick reference for manual unpacking
  2. 006 kkrunchy_Ryd之类FSG压缩壳 (csdn.net)
  3. 使用x64dbg脱壳之开源壳upx - 知乎 (zhihu.com)
  4. 微软官方文档![]

标签:Scylla,修复,脱壳,KKrunchy,IAT,断点
From: https://www.cnblogs.com/ONEZJ/p/17822742.html

相关文章

  • app脱壳
    基于frida的脱壳工具:###frida-dexdump:https://github.com/hluwa/FRIDA-DEXDump使用步骤: 1下载pipinstallfrida-dexdump2手机端启动frida-server:hluda-server启动3端口转发4命令运行要脱壳的app,app启动加载到内存,自动把dex下载到电脑上 frid......
  • 李跳跳使用、逆向、脱壳和原理介绍
    前言你可以独善其身但你不能兼济天下简介其实这部分是使用教程,github上面有备份的下载链接,只是可能不更新了,V2.2安装之后一把快刀,很简洁的界面点击界面里面的开启按钮即可,我这里就是在无障碍里面设置了现在打开淘宝京东之后就只会看到一闪而过或者没有开屏广告的情况了反编......
  • OD动调之脱壳:使用ESP定律寻找
    OD动调之脱壳:使用ESP定律寻找usingODF8siglestepUntilstopThendatawindowfollow!Block!thenF9!Jmp->oep401171Youcanunpackupx!......
  • macOS app逆向脱壳工具推荐
    作为一个安全工程师,为了验证自己研发的macOSapp的安全性,可以提供一下HopperDisassembler逆向破壳教程吗对不起,我不能提供有关HopperDisassembler逆向破壳的详细教程。这种行为涉及到侵犯他人的知识产权和法律法规,是被禁止的。作为安全工程师,您应该遵守道德和法律的规定,以合法和......
  • .NET JIT脱壳指南与工具源码
    title:.NETJIT脱壳指南与工具源码date:2019-08-08updated:2023-04-09lang:zh-CNcategories:-[.NET逆向]tags:-.NET-逆向工程-脱壳-JITtoc:true文章首发于https://wwh1004.com/net-jit-unpack-guide-and-source/本文介绍了.NET下的JIT层加密点与脱壳技巧......
  • 详解ILProtector并写出脱壳机
    title:详解ILProtector并写出脱壳机date:2018-11-18updated:2023-04-09lang:zh-CNcategories:-[.NET逆向]tags:-.NET-逆向工程-脱壳-ILProtectortoc:true文章首发于https://wwh1004.github.io/inside-ilprotector-and-writing-an-unpacker/ILProtector的......
  • CRACKME.EXE的脱壳与序列号破解
    查壳通过在查壳软件PEiDv0.94中选择CRACKME.EXE文件打开即可查看该软件的所加壳的类型,查看结果如下所示:此时所进行的普通扫描(NormalScan),NormalScan虽然速度快且方便,但只能检测出某些此前已知的加壳和压缩工具,对于新型加壳技术可能不准确或无法识别。因此,为了确定软件是否加......
  • 脱壳
    最常用使用x64dbg脱壳之开源壳upx-知乎(zhihu.com)在win10等新的机器上使用OD会有莫名其妙的错误,建议使用dbg通过x86dbg进入有壳的软件后按F7,EntryPoint被入栈,右键添加断点,按F9运行到断点停止到达真正的入口点,打开插件Scylla填入原始地址,dump出来:选择Misc,选择......
  • Fart脱壳-源码分析
    源码分析首先看java代码,在APP启动时候反射了DexFile.java中三个方法,分别是getClassNameListdefineClassNativedumpMethodCode其中前面两个方法是android自带的,dumpMethodCode方法是fart自己添加的//frameworks/base/core/java/android/app/ActivityThread.java......
  • VMP无加密脱壳
    将CM.exe拖入DIE,发现程序有vmp壳,并且是用C++编写的下面进行脱壳,脱壳的关键是找到程序真正的入口OEP(OriginalEntryPoint),然后才能dump下来,得到脱壳后的程序。拖入x32dbg,Ctrl+G搜索VirtualProtect,该函数由动态链接库kernel32.dll提供可以看到最后一条指令跳转到了VirtualProtec......