美文网首页
BUUCTF re:Youngter-drive

BUUCTF re:Youngter-drive

作者: hefengzeng | 来源:发表于2020-01-11 16:13 被阅读0次

    坑啊,跳了一个双线程的坑,结果还有一个坑
    对,这个题我觉得应该算是一个多线程的题
    查壳是发现加壳了,而且是upx壳,脱壳吧
    脱完壳,丢到IDA里打开,

    main函数: main
    main函数逻辑比较简单
    sub_4110FF读取输入,运行两个进程hObject,v1
    加密函数在StartAddress里,最后在然后在sub_411190里和TOiZiZtOrYaToUwPnToBsOaOapsyS比对 比对
    从StartAddress跟进去看加密部分 StartAddress
    看到加密函数sub_41112C,再跟进去时,提示
    不能f5
    这可能是堆栈不平衡导致的不能f5,到这个函数的汇编码去,并找到这里
    汇编部分
    看不到堆栈的话,option->general,把Stack pointer复选的勾打上就能看到了
    显示堆栈
    选中call,alt+k修改堆栈
    修栈.PNG
    然后就可以F5看加密部分了
    加密函数

    再回来main函数,看下面v1那个进程:


    进程二
    这个进程,好像没什么用,但它运行了--dword_418008,让计数器又减了1,并且可以看出是hObject、v1地交替运行,从而导致加密函数变成隔一个加密
    写脚本:
    s = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm' #off_418000
    d = 'TOiZiZtOrYaToUwPnToBsOaOapsyS' #off_418004
    f = ''
    for i in range(len(d)):
        if i%2 == 0:
            f = f + d[i]
        else:
            if(d[i].isupper()):
                f = f + chr(s.find(d[i])+96)
            else:
                f = f + chr(s.find(d[i])+38)
    print(f)
    

    好,f出来了:ThisisthreadofwindowshahaIsES
    没交上去,好吧,有个坑没发现
    dword_418008初始值为0x1d即29,也就是说下标从29开始,输入长度有30位,而sub_411190只比对了29位,需要再加任意一位,但貌似只有加E的交上去了
    感谢这位大佬的wp,告诉我29的坑
    https://l1b0.fun/13356/

    相关文章

      网友评论

          本文标题:BUUCTF re:Youngter-drive

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