(刚刚看题,就截止了,但是毕竟忙活了下,还是写下我的解题过程。很少来看雪,很少接触逆向,毕竟第一次发帖,难免有不正确之处,多多包涵)
第一题,无壳无密,开始没注意说明,也用PEid看了下。
1.接下来,直接运行一下,随机输入一串数字:
--> 
2.OD加载,右键-->查找-->查找所有参考文本串:

这算一种取巧的方法,因为本题的字符串少,很好找。
双击字符串,找到汇编代码区:

可以看到成功和失败两者的提示字符串,在两行代码上按F2下断点,同时可以按F9运行试一下。
3.重新加载,单步执行,看到创建窗口:

输入字符串“1234”后继续执行。执行到获取字符串的函数GetDlgItemTextA:

4.后面sleep函数不知干嘛的,不影响。后的传地址指令表明开始处理输入内容的,也就是开始接近关键部分了:

5.F7单步跟踪发现后面的函数并没有改变输入内容,猜测只是检查下字符获得串长吧(毕竟我逆向少,见得少)。然后一个cmp eax,0x4,后来测试几次发现是比较串长是否为4的。好了,找的过程有点啰嗦,直接说找到的核心代码吧。

这是判断输入的四个字符均不为0,且前两个字符为"1","5"(ASCII码值的十六进制为0x31,0x35)。
6.当然判断之后还有运算咯:

这一段,我是一边百度指令的作用一边记草稿理解的。大致过程可以这样理解:假设输入的4个字符为‘1’,‘5’,'v3','v4'-->将各字符减去字符‘0’的ASCII码值,获得其数值。也就是说字符'1'(ASCII码值为0x31),对应的数值为1-->然后运算公式就为(v3 - 0.2)* v4 * 16-->判断结果是否为384,也就是(v3 - 0.2) * v4 == 24?是的话就成功了。
7.好了,偷个懒,你们用程序跑也好,用脚趾头猜也好,能得出结果为v3=5,v4=5吧?
注册码为1555:

(开始本来想写详细点的,照顾下像我这样的新手。但是发现越写越啰嗦反而让人烦——是的,我有点懒。
总之题目比较简单,我也只是断断续续地解题,很遗憾没有提交。大家加油啊。)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课