压缩壳流程与处理

  • 压缩加壳流程图

    Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled.png
  • 先把 libexec.so 壳文件放到010 Editor 里面,搜索ascii string 如果查看到UPX或者AJM的字段,表示这里是压缩壳,但也有可能是其他字段标识

    Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%201.png
  • 解密压缩流程

    • 在linker中的调用so初始化方法的下一行断下来

      IDA动态调试,在linker调用so方法下一行断下来,如下图蓝色部分,这时候so就是被解密的,dump出来即可

      Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%202.png

      dump出来之后拿到new.so,但是发现里面有一些错误,放到IDA里面,有些部分是红的,这时候需要做如下操作:修改两个段和一个动态链接表的大小和偏移

      • 壳结构,以12字节为分割

        Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%203.png

        l_info 是壳的头

        p_info 是压缩壳的程序头

        b_info 是压缩前和压缩后信息

        下图 .init_proc 是壳的解密程序,上面的 0X1080C 是壳的起始点(l_info起始地址)

        Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%204.png
      • 010 Edith 中操作

        打开 010 Edith 按F5,用ELF.bt文件进行解析,如果出现不了解析结果的话,按ALT+4

        • 打开原so(libexec.so),如图点击goto,到0x1080C的位置

          Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%205.png
        • 这时候以12字节为分割,顺序出现的就是 l_info p_info b_info

          Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%206.png

        重要的是 b_info ,上图红色部分,34 01 00 00 也就是压缩前长度为 134,9C 00 00 00 是压缩后的长度 9C,因为是原so,所以用 0x1080C + 9C = 0x108CC

        • 下图中,程序头表中上面两个是loader段,第三个是动态链接库,这三个是需要修改的地方

          Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%207.png
        • 下图中解释如下

          Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%208.png
          1. Elf32_Off p_offset_FROM_FILE_BEGIN 指的是当前loader段未加载到内存时相对于文件开始位置的偏移
          2. Elf32_Addr p_vaddr_VIRTUAL_ADDRESS 指的是当前段在内存中相对于文件开始位置的偏移
          3. Elf32_Word p_filesz_SEGMENT_FILE_LENGTH 指的是当前段未加载到内存时的长度
          4. Elf32_Word p_memsz_SEGMENT_RAM_LENGTH 指的是当前段在内存中的长度
          5. 我们看第一个段中的 3和4 是一样的,但是第二个loader段中的 3和4 是不一样的,是因为第二个段中有一些未初始化的数据,加载到内存后会初始化,所以内存中的长度会大于未加载内存时的长度
        • 所以我们现在需要进行修改的就是两个load段和动态链接的大小和偏移

          上面我们拿到的 0x108CC ,在原so里面goto到位置,如下所示,红框部分表示第一个load段的大小 AC 6C 04 00,蓝色框表示load段的内容

          Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%209.png
          • 打开从内存中dump出来的so文件,找到第一个段,把文件大小和在内存中的大小全改成AC 6C 04 00

            Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%2010.png
            Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%2011.png

          第一个load段一般是代码,第二个是数据,所以加壳一般只压缩第一个load段,所以只需要改第一个load段的大小

          • 但是第二个load段和动态链接需要改一下,需要把在内存中的地址Elf32_Addr p_vaddr_VIRTUAL_ADDRESS 给到 当前段相对于文件起始位置的偏移:Elf32_Off p_offset_FROM_FILE_BEGIN ,因为dump出来的so是一个新的so,基本只包含load段,所以跟原so的结构是不一样的,所以当它自己作为一个单独的so存在的时候,当前段相对于文件起始位置的偏移:Elf32_Off p_offset_FROM_FILE_BEGIN 这个位置需要改变,跟内存中的偏移一致即可

            Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%2012.png
            Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%2013.png
      • 前面拿到的解密so主要用作静态分析,分析加壳流程

      • 拿到解壳后加载到内存中解密后的dex

        先过反调试,过完后,进 libdvm.so ,搜索 _Z12dexFileParsePKhji ,这个位置开始地方下段,即可拿到解密后的dex

        断下来后R0就是起始地址,R1就是大小

        Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%2014.png

        dump出来后如果是如下图,那么就是dexopt文件,这时候需要打开GDA工具,放进去跟原dex对比,如果差不多,那么就是dump失败,如果不一样,那么是有可能是成功

        为什么说有可能,因为如果整体加载,那么就是成功,但是也有可能只有一部分数据,那么就是需要分析so,看里面的加密逻辑

        Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%2015.png

        然后Odex2Dex转成dex导出,完成

        Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%2016.png

        但是需要注意:在 _Z12dexFileParsePKhji 进行dump的时候,有可能系统的一些代码也会走这里,所以需要注意,如果是个apk的dex,基本在10万字节(0x186A0)以上,太小可能就是系统的

        dump的时候,需要等这个结束,如果几M那就,是需要些时间的,要不然会出现文件不完整,出错的情况

        Untitled%20b87c2790bd8e44b1b1300d93e1fa51b7/Untitled%2017.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353