新160个CrackMe048-monkeycrackme1、049-THraw-crackme8、050-daxxor逆向分析

048

无壳

暴力破解

找到关键跳转,将其给nop掉即可获取破解版本

算法分析

继续想上找到函数头进行下断点,重新运行继续分析,显示获取了用户名,之后将用户名与一个参数0x4DE1一起经过函数466230获取生成的序列号,之后再获取用户输入的序列号进行对比,相等则成功

下面通过IDA来分析函数466230,主要是进行一个循环,将程序自带的参数n19937_1逻辑右移8位和用户名的ASCII码值进行异或,之后再将程序内置字符串str1+6、str1+4进行(str1+6)+(str1+4)*(n19937_1+刚才计算出的异或结果,得到的值作为新结果覆盖到n19937_1这个n19937_1作为种子进行到下一循环,每次循环都要将异或结果转换成十六进制的二位数之后再转换成字符,n19937_1的值为4DE1

在x32dbg的追踪中可以找到str1+6和str1+4这两个值分别为58BFCE6D、58BF

可以生成keygen:

python 复制代码
def generate_serial(username):

    key1 = 0xCE6D  

    key2 = 0x58BF  

    seed = 0x4DE1  

    

    serial = ""

    v10 = seed

    

    for ch in username:



        high_byte = (v10 >> 8) & 0xFF

        

        xor_result = high_byte ^ ord(ch)

        

        v10 = (key2 + key1 * (v10 + xor_result)) & 0xFFFF

        

        serial += format(xor_result, '02X')

    

    return serial



def main():

    username = input("Input username: ").strip()

    if not username:

        print("Username cannot be empty!")

        return

    

    serial = generate_serial(username)

    print(f"Serial: {serial}")



if __name__ == "__main__":

    main()

049

UPX壳

脱壳

发现没办法脱壳,可能是因为加壳之后程序的部分信息被修改

使用010Editer查看头部信息,一般UPX壳的位置在200处,一般UPX处的标志位是.upx0、.upx1、.rsrc 等标准名称。这里第一个段被改名为 .code,第二个段被改名为 .text,这破坏了 UPX 的自动识别机制。用十六进制编辑器将 .code 改回 .upx0,将 .text 改回 .upx1

之后再脱壳

暴力破解

找到通往正确窗口关键跳转将跳转给改成nop和判断用户名是否大于2个字符,将跳转给改成jmp即可获取破解版本

算法分析

先是进行一个循环对用户名的每个字符都将ASCII码值转换成整数再拼接在一起

之后再将一个地址里面的数据直接取出来转换成整数,之后再提取之前根据用户名获取的字符串,将这两个字符串进行拼接,生成一个新的字符串,再将用户输入的字符串与新的字符串进行对比,相等则成功

可以生成keygen:

python 复制代码
username=input("Input username:").strip()

serial="1549945052"



for ch in username:

    serial += format(ord(ch), 'x').upper()



print(f"Serial:{serial}")

050

无壳

暴力破解

分析发现用户名长度必须大于6,继续向下可以发现失败和成功语句前面的跳转语句,将他给nop掉,和前面判断用户名长度的跳转给改成jmp即可获得破解版本软件

算法分析

先是对用户名的每个字符串进行当前字符的ASCII码值+源字符串长度-0x4-源字符串长度-0x2+0x2,即相当于当前字符的ASCII码值-0x4,边计算边将计算后的字符直接替换源字符串中的字符

之后再对生成的字符串中的第三个位置后拼接一个"-",第五个位置后拼接一个"-",第六个位置后拼接一个"axd"

可以生成keygen:

python 复制代码
username = input("Input username:").strip()



name = ""

for ch in username:

    name += chr(ord(ch) - 0x4)



print(f"name:{name}")



inserts = [(3, "-"), (4, "-"), (4, "axd")]



for pos, content in sorted(inserts, reverse=True):

    if len(name) >= pos:

        name = name[:pos] + content + name[pos:]

    else:

        name = name + content



print(f"final result: {name}")
相关推荐
sysinside2 小时前
Binary Ninja 6.0 (macOS, Linux, Windows) 发布 - 逆向平台
逆向·反编译
聚铭网络3 小时前
【一周安全资讯】两项数据资产分类与登记国家标准9月1日实施;索尼、华纳联合起诉Anthropic,指控盗用版权音乐训练Claude模型
人工智能·安全·分类
今日热点4 小时前
Windows 系统 C 盘深度清理教程:安全释放存储空间,避开误删风险
windows·安全
青软青之LIMS4 小时前
King‘s LIMS如何成为快消品行业质量安全的“数字护城河“
安全·云计算
Sagittarius_A*4 小时前
CVE-2026-42271:从 MCP stdio 测试接口看 LiteLLM 的命令执行风险与防御闭环
网络·windows·安全·cve·rce
外域速览5 小时前
OpenAI Astra 跨过「高危红线」、李飞飞世界模型 Atlas 落地:AI 行业进入「安全与落地」双拐点
人工智能·安全
是隼人5 小时前
buuctf-pwn PWN4(双引号的转义缺陷)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
一只鹿鹿鹿5 小时前
水利信息化建设项目物联网(视频监控系统)施工方案(Word)
物联网·安全·web安全·系统安全
一次旅行5 小时前
2026‑09‑04 AI产业深度解读|英伟达129亿收Hugging Face、GPT-6 Astra刷榜、智能体安全走向产品化
人工智能·安全·开源
jimmyleeee5 小时前
大模型安全之四:供应链安全
人工智能·安全