首页
社区
课程
招聘
[讨论]第一题 WannaLOL
发表于: 2017-6-2 15:15 3669

[讨论]第一题 WannaLOL

2017-6-2 15:15
3669

1、找到文本输入点
    输入“123456”可以看到“error!”的错误提示。

    在OD中正好可以查找到“error!”字符串。

    定位到调用“Messagebox”函数的位置。

    上推到“GetDlgItemTextA”函数即为文本输入点。

2、分析数据处理过程
    由文本输入点往下跟踪输入文本的处理,大概如下:
    首先判断输入文本长度是否为“0x4”,若不是则跳转到错误提示。

   

    其次判断每个字符ASCII码是否为“0x30”(48)即数字0,若是则跳转到错误提示,之后判断第一二个字符是否分别为“0x31”(49)和“0x35”(53)即数字1和5,若不是则跳转到错误提示。

   

    然后对四个字符进行计算,将第三四个字符表示为x和y,同时将16进制数字转换为10进制,则过程得到的结果为[(x-48)-(49-48)/(53-48)]*(y-48)*16


    最后与ds:[0x407118]中的常数384比较,若相同则弹出“Registration successful!”的正确提示。

3、解出注册码
    根据计算过程求出方程:
    [(x-48)-(49-48)/(53-48)]*(y-48)*16=384
x和y在可输入ASCII码范围内的整数解即可,则可如下求解

    for i in range(126):
    for j in range(126):
        if(((i-48)-0.2)*(j-48) == 24):
            print(i)
            print(j)
            print("15"+"%s"%(chr(i))+"%s"%(chr(j)))
            print("------")

    解得:

47
28
15/
----
49
78
151N
----
53
53
1555
----

    其中第一个的ASCII码”28“为文件分割符,注册码则为“151N”和“1555”。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 154
活跃值: (1619)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
原来有多个答案呢  学习了
2017-8-7 15:29
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
解多解的思路牛了
2017-10-31 15:36
0
游客
登录 | 注册 方可回帖
返回
//