九零登录

[【通过】] 【已转正】逆向分析:面试QQ的简单笔试题

[复制链接]
发表于 2016-7-22 10:28:41 | 显示全部楼层 |阅读模式
QQ图片20160722093600.png

0x01 算法表达式总结

str2=(str1[i+1]>>2&0x1f|((str1&0x7)<<2))^0x15;

0x02 简单分析步骤:
     首先查了下壳,发现查壳类型不同,疑为自写壳。
图片1.png
运行程序查看程序行为:
图片2.png
大致推断为通过用户名校验密码用调试器进行分析

0x03 调试器分析步骤
通过对用户名下内存断点,进行断点跟踪
图片3.png

图片4.png
通过内存断点跟踪找到内存地址为 0040741E算法起始部分
图片6.png
图片5.png
在IDA中的显示以及反编译代码
通过对整个程序段分析知道:
     1.首先对输入的用户名字符串尾部追加一个首字符
     2.之后对该字符串分组,分组方式为字符串中每个字符都与他后面的字符组成一
     个分组
     3.对该分组中的每一个字符处理,处理方式为
       0x01 对第二个字符HEX进行算术右移2位得到的值与0x1F 逻辑与运算得到
      值1
       0x02 第一个字符HEX值 与0x7 逻辑与 得到的值 再进行算术左移2位的得到
       的值再与上文值1进行逻辑或运算 得到的值再与0x15进行逻辑异或运算得到
       的值的DEC为 当前分组在密码表中对应的字符
       密码表为:
       0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMTVMPROTECT310
图片7.png

算法代码
[C] 纯文本查看 复制代码
#include <stdio.h>
#include <string.h>
int main()
{
        char str1[20]={0};
        char str2[20]={0};
        char str3[]="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMTVMPROTECT310";
        int len=0,flag=0;
        printf("请输入用户名");
        scanf("%s",str1);
        len=strlen(str1);
        for(int i=0;i<len;i++)
        {
                if(i==len-1)
                {
                        str2=(str1[0]>>2&0x1f|((str1&0x7)<<2))^0x15;/*(((str1[0]>>2)&0x1f)|(str1&0x7<<2))^0x15;*/
                }
                else
                {
                        str2=(str1[i+1]>>2&0x1f|((str1&0x7)<<2))^0x15;/*(((str1[0]>>2)&0x1f)|(str1&0x7<<2))^0x15;*/
                }
        }
        for(i=0;i<len;i++)
        {
                printf("%c",str3[str2]);
        }
        printf("\n");
        return 0;
}

================================
超过10位正式会员同意,转正成功。
                管理05


单选投票, 共有 18 人参与投票

投票已经结束

94.44% (17)
5.56% (1)
您所在的用户组没有投票权限

CrackMe题目.7z

62.37 KB, 下载次数: 2078

评分

参与人数 1酒票 +5 收起 理由
管理05 + 5 欢迎加入90!

查看全部评分

发表于 2016-7-22 10:29:26 | 显示全部楼层
版面太乱了 整理一下吧 态度很重要
 楼主| 发表于 2016-7-22 10:31:19 | 显示全部楼层
管理05 发表于 2016-7-22 10:29
版面太乱了 整理一下吧 态度很重要

恩 好 不是很会用 论坛的编辑器
发表于 2016-7-22 10:57:24 | 显示全部楼层
社区逆向的人好少,我给你一票,如愿你早日加入90大家庭。
发表于 2016-7-22 11:09:26 | 显示全部楼层
最近也在学习逆向 所以希望更多的逆向朋友加入九零 加油
发表于 2016-7-22 11:40:54 | 显示全部楼层
@口llie
腾讯什么部门啊,还要考逆向。

另外给你一票,希望继续努力,给论坛带来精彩的逆向文章。
发表于 2016-7-22 11:54:08 | 显示全部楼层
通过,学习了,期待更好的逆向文章。
 楼主| 发表于 2016-7-22 12:07:51 | 显示全部楼层
斯杰 发表于 2016-7-22 11:54
通过,学习了,期待更好的逆向文章。

恩,好,是,管理员修改标头么?  还是自己?
发表于 2016-7-22 13:44:54 | 显示全部楼层
腾讯的无毒面试题被360秒杀。。。。真是搞笑。
 楼主| 发表于 2016-7-22 15:03:44 | 显示全部楼层
lufei 发表于 2016-7-22 13:44
腾讯的无毒面试题被360秒杀。。。。真是搞笑。

只是笔试题,从当时看来只是看看有没有相关基础的吧
发表于 2016-7-22 16:02:04 | 显示全部楼层
口llie 发表于 2016-7-22 15:03
只是笔试题,从当时看来只是看看有没有相关基础的吧

通过对整个程序段分析知道:
     1.首先对输入的用户名字符串尾部追加一个首字符
     2.之后对该字符串分组,分组方式为字符串中每个字符都与他后面的字符组成一
     个分组
     3.对该分组中的每一个字符处理,处理方式为
       0x01 对第二个字符HEX进行算术右移2位得到的值与0x1F 逻辑与运算得到
      值1
       0x02 第一个字符HEX值 与0x7 逻辑与 得到的值 再进行算术左移2位的得到
       的值再与上文值1进行逻辑或运算 得到的值再与0x15进行逻辑异或运算得到
       的值的DEC为 当前分组在密码表中对应的字符
       密码表为:
       0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMTVMPROTECT310

这个能写详细一点吗?比如哪段汇编代码对应哪些?我也想连下手。
 楼主| 发表于 2016-7-26 17:48:16 | 显示全部楼层
lufei 发表于 2016-7-22 16:02
通过对整个程序段分析知道:
     1.首先对输入的用户名字符串尾部追加一个首字符
     2.之后对该字符 ...

当时的笔记,具体细节也记不住了,他中间有很多花指令和跳转,当时是读了1个小时左右代码看出了的
发表于 2016-7-26 18:49:56 | 显示全部楼层
口llie 发表于 2016-7-26 17:48
当时的笔记,具体细节也记不住了,他中间有很多花指令和跳转,当时是读了1个小时左右代码看出了的

能给个私信下你的qq吗?那个如何寻到算法处也有点问题。
发表于 2016-7-27 10:21:00 | 显示全部楼层
lufei 发表于 2016-7-22 13:44
腾讯的无毒面试题被360秒杀。。。。真是搞笑。

只能说360误报严重罢了

九零

GMT+8, 2026-10-22 13:25

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表