神州数码客户端密码逆向(c++实现)

本程序参考了   愚自居 的 16位汇编 我校神州数码客户端解密 

算法简介:

1.从密文字符串中一次取字符
    第一次放入ah
    第二次放入al

2.对于ah,检测是否是>=41H(A的ascii码)
    如果条件成立,则减37H
        否则与30H异或
    左移四位

3.对于al,检测是否是>=41H
    如果条件成立,则减37H
        否则与30H异或

4.将al与ah相加,并与这一轮所对的密钥异或,放入明文字符串

5.如果没有遇到字符串结束符,转向步骤1,进行下一轮

结束:在明文字符串中写入字符串结束符

 

实现如下

 

#include  < cstdlib >
#include 
< iostream >

using namespace std;

int  main( int  argc,  char   * argv[])
{
     
     
char key[20]={0x0B,0x1E,0x49,0x60,0x0F,0x78,0x27,0x5E,0x25,0x02,0x77,0x2A,0x55,0x20,0x35,0x7A,0x1B,0x0E,0x59,0x47};
    
char code[21]; //保存密文 
    char pass[21]; //保存明文 
     
     
char code_t[255];
     
     cout
<<"请输入密文(注意大小写):";
     cin
>>code;
     
     
int i(0),j(0),k(0);
     
int ah,al;
     
     
while(code[i]!=0)
     
{
            
if(k==0)
            
{
                ah
=code[i];
                 
if(ah>='A')ah=ah-0x37;
                
else ah^=0x30;          
                ah
=ah<<4;
                
                k
++;          
            }

            
else
            
{
                 al
=code[i];
                 
if(al>='A')al=al-0x37;
                 
else al^=0x30;
                 
                 
//不移位了?
                al=al+ah;
                ah
=key[j]; 
                al
^=ah; 
                 pass[j
++]=al;
                 
                   k
=0;
            }

            
            i
++;                            
    }

    pass[j]
=0;
    
    cout
<<"密码明文:"<<pass<<endl;                  

    system(
"PAUSE");
    
return EXIT_SUCCESS;
}

再次感谢 愚自居 所做的分析工作,没有他的汇编逆向算法,这个程序是写不出来的

我只是将他的汇编算法用C++重新实现了一遍而已

特此致谢
   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值