简单逆向

1.请协助他findkey

在分析程序前,要先运行程序找到第一步到底要干嘛,再找到main函数设断点,运行找到输入口先,根据运行可以知道要输入随便输入一个用户名后来就可以继续运行在运行到一个函数时,简单分析是一个看输入个数是否合适。一个加减运算是12位,所以重新分析输入12位密码,在上个函数后面有一个比较函数,特点是把输入口令与内存另一个比较,这明显内存中的数据就是用户名。然后从断点运行输入正确的用户名。继续运行会会出现一个输入用户密码的输入行同理输入一个密码继续运行在运行时会发现在一个函数中输入密码在与另一组数据异或而不是比较既然在异或没有比较那么肯定有下一步操作。继续下一步果然结果在与另一个比较。这就简化为输入密码与内存数据异或等于另一个数据。a异或b=c→a异或b异或b=c异或b→a=c异或b。(根据参与异或的数字可以判断如果是数字会是二位数所以是字符)在异或时最好编一个程序来,方便快捷。这样就会得到flag。

总结:1.在输密码时后面应该有个与内            存数据比较的函数

    2.在有输入数据有关或输入数据得出的数据有关的函数都是得到密码的关键。

      3.在解决有关密码的计算可以用写程序解决。

2.rev1(a。为什么不能直接运行?1.是与后缀有关2.函数的关系

              b。为什么od打不开?难道位数不同,如果不同那ide为什么可以打开?

              c。它到底是用什么编译的?)

在这个题中无法直接运行直接运行,只好转入看它的伪代码。

这个伪代码很多认不到大概可以看出是一个字符串与另一个字符串异或;在C++编译器写一个代码就行;

3.bin100

分析明白这个程序是扔骰子,但要扔出来概率太小;

所以只有进行修改;(修改只有用od比较快)

在源代码中有很多汉语提示,在每个正确语句地址前找判断项;

把每个判断语句修改为jz;

修改后进行保存然后运行发现得不到答案;

进一步分析是因为在判断正确后函数会把flag清零;

所以只有在powershell里运行就可以了;

你可能感兴趣的:(简单逆向)