juckcode

作者: 喝豆腐脑加糖 | 来源:发表于2018-05-19 21:00 被阅读0次

    一道逆向题,在吾爱论坛下载。

     压缩包,打开之后两个文件。

      使用peid查看文件,使用c++编写,32位文件。放入ida中查看,什么都看不懂,出题人肯定做过处理。根据题目应该便是加入了花指令。

      花指令:加入程序中,作用便是使反汇编出现的代码很难看懂。这些指令迷惑作用,将它们全部删除也不会影响程序的执行。所以ida反编译便会很乱。

      目前我知道的放法便是放入od中,一段一段找到这些花指令。然后全部使用nop填充

      但会相当费时间,有时候还可能找错。不过当把花指令全部去掉之后,便可以使用ida进行分析。(吾爱破解论坛中便是这么做的)

      使用od分析

      花指令并不影响动态调试,所以可以不管这些。od载入之后,在winxp中出现问题。提示该程序无效。

     嗯,不知道是怎么回事,先在win10上进行。

      载入之后,单步运行发现有一个“.\file"的提示,在程序执行完毕后出现”error in open file“的字样。所以函数应当是打开名为“file”的文件,之后将其中内容读取后,进行运算。

     在程序同目录下创建一个file文件,随便写入一段字符串。再次运行。

    输出结果为

       开始单步调试,这一过程因为对于函数不熟练,找了很长时间的加密部分。直到看到其中一段出现调用base函数,才算找到加密的方向。根据函数调用次数推断出进行了4次base运算。

     **** 将四个字符串组合起来,合成一个。(这里还有一个问题,od找找看~)****

     接下来问题就来了,超长的循环。硬是看了几个小时。 ━┳━ ━┳━

    分析过程,有点乱

    在一段循环中,进行运算,产生一个新的字符串.(其中“628e205d”)便是正在产生的字串,给的提示是(“%s%.2hhx")意思便是将字符串按照16进制保存

    循环过程中产生的字符串:"628e205dbb"

    在这里每个字符加上:0x10,得到下方字符串。

    od分析流程:便是flag进行四次base64进行加密,之后合并成一个字符串,之后base64加密。并且每个字符+0x10。产生的字符串便储存在:flag.enc中,逆向之后获得flag

    FFIF@@IqqIH@sGBBsBHFAHH@FFIuB@tvrrHHrFuBD@qqqHH@GFtuB@EIqrHHCDuBsB

    qurHH@EuGuB@trqrHHCDuBsBruvHH@FFIF@@AHqrHHEEFBsBGtvHH@FBHuB@trqrHH

    ADFBD@rquHH@FurF@@IqqrHHvGuBD@tCDHH@EuGuB@tvrrHHCDuBD@tCDHH@Furu

    B@tvrIH@@DBBsBGtvHH@GquuB@EIqrHHvGuBsBtGEHH@EuGuB@tvrIH@BDqBsBIFEH

    H@GFtF@@IqqrHHEEFBD@srBHH@GBsuB@trqrHHIFFBD@rquHH@FFIuB@tvrrHHtCDB

    @@

      接下python写的脚本:

    s="FFIF@@IqqIH@sGBBsBHFAHH@FFIuB@tvrrHHrFuBD@qqqHH@GFtuB@EIqrHHCDu

    BsBqurHH@EuGuB@trqrHHCDuBsBruvHH@FFIF@@AHqrHHEEFBsBGtvHH@FBHuB@trq

    rHHADFBD@rquHH@FurF@@IqqrHHvGuBD@tCDHH@EuGuB@tvrrHHCDuBD@tCDHH@F

    uruB@tvrIH@@DBBsBGtvHH@GquuB@EIqrHHvGuBsBtGEHH@EuGuB@tvrIH@BDqBsBIF

    EHH@GFtF@@IqqrHHEEFBD@srBHH@GBsuB@trqrHHIFFBD@rquHH@FFIuB@tvrrHHtCD

    B@@"

    s1=""

    for i in s:    

    s1 +=(chr(ord(i)-0x10))s2=b''

    s2 =bytes.fromhex(s1)s3 =base64.b64encode(s2)

    s4 =''fori inrange(len(s3)//4):    

    s4 +=hex(s3[i*4])[2:]s4 =bytes.fromhex(s4)

    print(s4)

    for i in range(4-(len(s4)%4)):    

    s4 +=b'='s5 =base64.b64decode(s4)print(s5)

           flag{juck_code_cannot_stop_you_reversing}

    下面是根据ida分析结果,是看着论坛来的。我自己去花指令出错了

    1.先对原始字符串base64加密一次,之后再每个字符加上+0x40

    2.之后再次对新的字符串再base64加密,并每个字符<<7

    3.再次对新字符串进行一次加密,每字符-0x9E

    4.最后对新字符串加密一次

    5.最后一个没有看出来,是看其他人的wp。对前面每一步加密后的字符串排序,为b1,b2,b3,b4之后将它们每个字符依次取出来如下:b1第一个字符,b2第一个字符,b3第一个字符,b4第一个字符,b2第二个字符,b2第二个字符,b3第二个字符,b4第二个字符.........

    在这里便会发现分析结果跟od有些区别,部分操作比od更清楚。但是这样的话,对于我来说写逆向运算代码复杂度更大。。。

       

    相关文章

      网友评论

          本文标题:juckcode

          本文链接:https://www.haomeiwen.com/subject/lyladftx.html