查看: 90|回复: 5

[Pwn] 反-反汇编patch学习

[复制链接]

2

主题

12

帖子

0

精华

初级会员

Rank: 4

学币
5
荣耀
0
rank
0
违规
0

    发表于 2021-7-7 15:08:50 | 显示全部楼层 |阅读模式

    相关题目:

    最近在学习反-反汇编技巧,以此记录。
    仅仅是新手的学习记录,大佬轻喷

    温馨提示:
    1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
    2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
    3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
    学逆向论坛-免费的逆向学习论坛

    2

    主题

    12

    帖子

    0

    精华

    初级会员

    Rank: 4

    学币
    5
    荣耀
    0
    rank
    0
    违规
    0

       楼主| 发表于 2021-7-7 15:09:39 | 显示全部楼层
      本帖最后由 ctfer 于 2021-7-7 15:10 编辑

      编写一个测试程序
      这个程序没有什么意义,在IDA中把puts函数patch成nop用于添加我们自己的指令
      肯定有更好的方法,但是这里只是为了练习
      visual studio 2019 preview x64 release编译
      #include<stdio.h>#include<stdlib.h>
      #include<string.h>
      int main(int argc, char** argv) {
          char a;
          system("pause");
          a = getchar();
          puts("nop me");
          puts("nop me");
          puts("nop me");
          puts("nop me");
          puts("nop me");
          puts("nop me");
          puts("nop me");
          putchar(a);
          system("pause");
          return 0;
      }

      学逆向论坛-免费的逆向学习论坛

      2

      主题

      12

      帖子

      0

      精华

      初级会员

      Rank: 4

      学币
      5
      荣耀
      0
      rank
      0
      违规
      0

         楼主| 发表于 2021-7-7 15:18:15 | 显示全部楼层
        patch过程添加nop
        IDA打开,根据字符串找到我们自己的逻辑


        把一部分puts("nop me") patch成nop,类似这样,在这些nop中开始表演


        学逆向论坛-免费的逆向学习论坛

        2

        主题

        12

        帖子

        0

        精华

        初级会员

        Rank: 4

        学币
        5
        荣耀
        0
        rank
        0
        违规
        0

           楼主| 发表于 2021-7-7 15:19:47 | 显示全部楼层
          添加特别的汇编指令
          这里现在一堆nop中添加如下的两条指令,来分析一下


          call $+5也就是跳转到pop rax,看起来和直接跳到下一条指令没什么区别
          但实际上,call会把下一条要执行的指令地址压栈,这里也就是把0x140001035压栈
          再pop rax,这时rax就是0x140001035了


          调整rax的位置,加上8以后jmp rax,准备跳到原本的指令中
          这里rax==0x140001035+8==0x14000103C
          patch到这里,保存一下,即附件中的patched1
          在IDA中重新打开,调试发现,jmp rax即将跳转到jmp指令的之后的某条指令上


          学逆向论坛-免费的逆向学习论坛

          2

          主题

          12

          帖子

          0

          精华

          初级会员

          Rank: 4

          学币
          5
          荣耀
          0
          rank
          0
          违规
          0

             楼主| 发表于 2021-7-7 15:21:27 | 显示全部楼层
            添加垃圾指令
            为了让反汇编引擎"出错",我们可以在中间即将跳过的nop中,添加特殊的垃圾指令

            比如刚刚动态调试发现会跳转到...03D的位置上,那我们就让03D的指令是jmp到接下来的原程序流程

            这里也就是跳转到puts("nop me")


            保存一下,作为patched2
            可以看到还是可以正常运行的
            虽然IDA的反汇编引擎识别的不错,但是F5的结果就有点差了



            我们改成0xEB,保存为patched3,重新打开,可以看到IDA的反汇编已经把很多指令识别为数据了


            F5后也看不到原本的几个puts("nop me")了

            学逆向论坛-免费的逆向学习论坛

            2

            主题

            12

            帖子

            0

            精华

            初级会员

            Rank: 4

            学币
            5
            荣耀
            0
            rank
            0
            违规
            0

               楼主| 发表于 2021-7-7 15:21:44 | 显示全部楼层
              让IDA正确分析
              本程序中,可以通过动态调试发现jmp rax的目的地,然后从call $+5开始,把这些指令都nop掉,直接jmp 到该去的地址,帮助IDA正确分析

              帮助IDA了解哪些是数据、哪些是代码指令,可以用U D C这三个快捷键,应该是undefine,data,code的意思
              学逆向论坛-免费的逆向学习论坛
              关闭

              论坛公告上一条 /1 下一条

              快速回复 返回顶部 返回列表