08067-wp


cm50

  • 程序类型 : .net程序
  • 关键数据 :

int32 pn[] # 存储号码内容

this.point # 存储号码长度

this.contrast[] # 结果对比字符串

  • 关键函数 button12_click
  • 分析得到要求 (根据.net rlector 反编译结果):
  1. 正确结果长度为 5
  2. pn 每个元素 ^4 后 结果为[52 , 60 , 52 ,50 ,51] (this.contrast[])
#根据处理过程逆推 输入的号码
result = [52 , 60 , 52 ,50 ,51]
for i in result:
    print(chr(i ^ 4) , end = " ")  #结果 0 8 0 6 7

cm100

  • 程序类型 : MFC
  • 新的知识点 : od 获取输入框输入的断点 bp GetWindowTextA(W)
    。在命令框中输入文字后程序断在该api处 ,然后使用alt + f9 从 user32块 返回到 CM100的程序段 ,再从 cm100 的调用块 返回到逻辑块 即可找到 目标代码段 ,返回后的地址在 4026A6 , 从ida中找到该地址( 在函数sub_402600中) ,根据下图两个字符串 找到关键函数 (改名为target)


    alt
  • tip :
  • 1.sub_402600 # 最终判断函数
  • 2.sub_402310 # 处理和判断输入函数 :要求 :返回值不为0 即为成功

处理过程 :

  • 1.对输入的 奇偶数位置 的字符交换 如 0 - 1 交换 7轮 外循环
  • 2.对输入的 4的倍数位置交换 4-8 8-12 12-16 3轮 内循环
  • 3 .解题方法 : 逆过程 , 得出结果
result = list("1H@Y1S0718760Dm3")

start = 14
for i in range(7):
    start -= 2
    temp_start = 12
    while temp_start  > 0 :  
        result[temp_start ] , result [temp_start - 4] = result[temp_start - 4] , result[temp_start ]
        temp_start -= 4
    result[start] , result[start + 1] = result[start + 1] , result[start]
for i in result:
    print(i , end="")

你可能感兴趣的:(08067-wp)