-
-
[原创]2016-CM-NO.1
-
发表于: 2016-11-2 17:48 2516
-
先是运行,看到字符串 Password,ida搜素定位sub_402120,f5看源码,发现个特别的地方,初步判断是程序的比较代码,地址为00401CB0.
继续分析,这里调用sub_401C00,读取了输入,并判断是否包含'b',然后sub_402A50,判断是否包含'p',这里如果判断错误,就会调用SendMessageW,参数为0x40f,在sub_402120里会看到对应的操作 MessageBoxW(0, L"something you lost!", L"Failed", 0); .
继续分析,然后sub_401CB0 call 自己,不过设置了edx=1,就实现了跳转jnz loc_401D57,然后遇到了call sub_402870,这个是判断长度,得知serial的长度为7,同样的,这里报错也会调用SendMessageW,这里就不说了
继续分析,遇到了sub_401A60,这个可以看源码,他对输入进行加密,再调用sub_401870解密,并将小写字母转大写字母,判断输入的格式是否为数字和大写字母,不是就报错,参数0x40A,然后判断转换后的serial[2:6]是否为15PB,不是就报错,参数0x40B,正确就调用sub_401740.
继续分析,sub_401740里,他将serial的后一部分跟123456789拼接起来,假定名字为tab,然后,判断tab[0:2] == serial[0:2],得前两位为12,总共得到6位 1215pb,而tab[9]+'1' = 'c',所以得知tab是拼接的serial的后6位,所以由serial[6] = tab[6]+1的得知最后一位为8.
所以,serial位1215pb8
继续分析,这里调用sub_401C00,读取了输入,并判断是否包含'b',然后sub_402A50,判断是否包含'p',这里如果判断错误,就会调用SendMessageW,参数为0x40f,在sub_402120里会看到对应的操作 MessageBoxW(0, L"something you lost!", L"Failed", 0); .
继续分析,然后sub_401CB0 call 自己,不过设置了edx=1,就实现了跳转jnz loc_401D57,然后遇到了call sub_402870,这个是判断长度,得知serial的长度为7,同样的,这里报错也会调用SendMessageW,这里就不说了
继续分析,遇到了sub_401A60,这个可以看源码,他对输入进行加密,再调用sub_401870解密,并将小写字母转大写字母,判断输入的格式是否为数字和大写字母,不是就报错,参数0x40A,然后判断转换后的serial[2:6]是否为15PB,不是就报错,参数0x40B,正确就调用sub_401740.
继续分析,sub_401740里,他将serial的后一部分跟123456789拼接起来,假定名字为tab,然后,判断tab[0:2] == serial[0:2],得前两位为12,总共得到6位 1215pb,而tab[9]+'1' = 'c',所以得知tab是拼接的serial的后6位,所以由serial[6] = tab[6]+1的得知最后一位为8.
所以,serial位1215pb8
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
看原图
赞赏
雪币:
留言: