• CG-CTF WxyVM


    一.

    之前一直以为虚拟机是那种vmp的强壳,下午看了一些文章才逐渐明白虚拟机这个概念,目前ctf中题目出现的都是在程序中相等于内嵌了一个虚拟机,将程序代码转换成自己定义的指令,通过内嵌的虚拟机进行解释,就想jvm解释字节码一样。

    这题感觉直接分析数据流也可以逆向出来233,看了令师傅的博客,临时学习了下idapython,原来这玩意这么好用,有点顶,学了点皮毛,看了很多文章,很多骚操作。
    找到关键函数,之后从尾到头开始逆回去,
    在这里插入图片描述
    注意点:

    1.for循环 从14997开始,因为从零开始,小于14999,说明最后一次的i是14997,加个3为15000,循环结束
    2.数据溢出的问题,数据有时候很大,有时候又小,所以必须要控制数据的溢出。
    3.idapython的使用

    fact= [4294967236, 52, 34, 4294967217, 4294967251, 17, 4294967191, 7, 4294967259, 55, 4294967236, 6, 29, 4294967292, 91, 4294967277, 4294967192, 4294967263, 4294967188, 4294967256, 4294967219, 4294967172, 4294967244, 8]
    addr=0x6010C0
    for i in range(len(fact)):
        fact[i] &= 0xffffffff
    for i in range(14997,-1,-3):
        v0=Byte(addr+i)
        result=Byte(addr+i+1)
        v3=Byte(addr+i+2)
        if v0==1:
            fact[result]-=v3
        elif v0==2:
            fact[result]+=v3
        elif v0==3:
            fact[result]^=v3
        elif v0==4:
            fact[result]/=v3
        elif v0==5:
            fact[result]^=fact[v3]
    for i in range(len(fact)):
        fact[i] &= 0xff
    print(''.join(map(chr, fact)))
            
    
  • 相关阅读:
    洛谷 P1022.计算器的改良
    洛谷 P1014.Cantor表
    洛谷 P1464.Function
    洛谷 P1426.小鱼会有危险吗
    洛谷 P2089.烤鸡
    洛谷 P1579.哥德巴赫猜想(升级版)
    洛谷 P1618.三连击(升级版)
    通过ES6写法去对Redux部分源码解读
    闲谈Hybrid
    浅谈React、Vue 部分异步
  • 原文地址:https://www.cnblogs.com/YenKoc/p/12779890.html
Copyright © 2020-2023  润新知