吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5448|回复: 20
收起左侧

[原创] 网络验证Crackme

  [复制链接]
ERFZE 发表于 2020-2-21 22:12
本帖最后由 ERFZE 于 2020-2-21 22:29 编辑

0x00 前言

该CrackMe是网络验证。故首先在本地运行Sever端程序:

3KEKWd.png

0x01 发送

首先分析程序发送数据包的内容。于send()函数处设断后,F9运行程序并输入内容:

3KE1yt.png

点击Register按钮,来到断点处:

3KElQI.png

Ctrl+F9来到主函数:

3KEQSA.png

向上查看,于第二处GetDlgItemText()函数后设断:

3KEGef.png


打开IDA Pro,从第二处GetDlgItemText()函数后面开始分析:

3KEJw8.png

图中注释详尽,不再赘述。

3KENFg.png

上图取模运算的判断由优化公式而来:

  • x>=0:x%(2^n) = x&(2^n-1)

  • x<0:x%(2^n) = (x&(2^n-1))-1 | (~(2^n-1))+1

3KEUYQ.png

上图红色方框内指令是将Len(Name)Len(Key)Rand()%256依次写入某一处内存区域,名之为SendMes。绿色方框与蓝色方框内指令是将NameKey依次写入到SendMes之后。

3KEaWj.png

根据左边的三处箭头可以判断是for循环,粗略写出C代码如下:

int tmp;    //var_238
int KeyLength_NameLength_3;    //Len(Key)+Len(Name)+3
int b;
char SendMes[];    //Len(Name)+Len(Key)+Rnd(Time)+Name+Key

for(tmp=0;tmp<KeyLength_NameLength_3;tmp++)
{
    b=SendMes[tmp];

    b^=0xA6;
    SendMes[tmp]=(b&0xFF);

}

由上述分析可以得知发送数据内容,验证之:

3KEwSs.png

0x02 接收

清除之前所设断点,于recv()处设断,F9运行程序并输入内容后点击Register按钮,来到断点。Ctrl+F9来到主函数:

3KEByq.png

查看缓冲区内容:

3KEDO0.png

既然是加密数据,那么下面一定会有解密操作:

3KEsmV.png

根据上图粗略写出C代码如下:

int tmp;    //var_238
char Recv[];    //Data from server
char Decrypt[]; //0x41AE68

for(tmp=0;tmp<Len(Recv);tmp++)    //Len(Recv)=0x5A

    Decrypt[tmp]=Recv[tmp]^0x6E;

0x41AE68处存放解密后数据,长度为90 Bytes,跟进查看:

3KEywT.png

0X03 判断

3KE6TU.png

上图红色方框中指令处理解密后数据。《加密与解密》随书文件中给出一Python脚本如下:

#coding=utf-8
##《加密与解密》第四版
##code by DarkNess0ut

import os
import sys

def Getasm(ea_from, ea_to, range1, range2):
    fp = open("code.txt","w")
    ea = ea_from
    while ea < ea_to:
        cmd = GetMnem(ea)
        if cmd == "mov" or cmd == "lea":
            opcode = Dword(NextNotTail(ea)-4)
            if opcode < 0: #opcode < 0,处理 mov  edx, [ebp-350]指令,否则处理mov  edx, [ebp+350]
                opcode = (~opcode + 1)
            Message("-> %08X %08X\n" % (ea, opcode))

            if range1 <= opcode <= range2:
                delta = opcode - range1
                MakeComm(ea, "// +0x%04X" % delta) # 加注释到IDA中
                fp.write("%08X %s\n" % (ea, GetDisasm(ea)))
        ea = NextNotTail(ea)
    fp.close()
    Message("OK!")
Getasm(0x401000,0x40F951,0x41AE68,0x41AEC1);

该脚本功能是将某块指令(该例中为0x401000——0x40F951)内访问指定内存区域(该例中为0x41AE68——0x41AEC1)的指令其后添加注释并拷贝到一TXT中。笔者对其稍加修改如下:

import os
import sys

def Getasm(ea_from, ea_to, range1, range2):
    fp = open("E:\\code.txt","w")
    ea = ea_from
    while ea < ea_to:
        cmd = GetMnem(ea)
        if cmd == "mov" or cmd == "lea":
            opcode = Dword(NextNotTail(ea)-4)
            if opcode > 0x7fffffff: #opcode < 0,处理 mov  edx, [ebp-350]指令,否则处理mov  edx, [ebp+350]。原作者此处逻辑虽正确,但判断表达式错误
                opcode = 0x100000000-opcode
            Message("--> %08X %08X\n" % (ea, opcode))

            if range1 <= opcode <= range2:
                delta = opcode - range1
                fp.write("%08X %s\n" % (ea, GetDisasm(ea)))
                MakeComm(ea, "// +0x%04X" % delta) # 加注释到IDA中,注释内容为访问内存相对于起始内存偏移量
                ea=NextNotTail(ea)
                while ea<ea_to:
                    cmd=GetMnem(ea)
                    if cmd!="jnz":
                        fp.write("%08X %s\n"%(ea,GetDisasm(ea)))
                    else:
                        break
                    ea=NextNotTail(ea)
                fp.write("--------------------------------\n")
        ea = NextNotTail(ea)
    fp.close()
    Message("OK!")

Alt+F7执行该脚本,Shift+F2:

3KEgkF.png

TXT内容如下:

3KE2Y4.png

负责判断相关指令如上,可根据指令修改相应内存的内容以完成验证。同样可以修改004016BE处指令为EB 63达到目的:

3KE3OP.png

免费评分

参与人数 10威望 +1 吾爱币 +28 热心值 +8 收起 理由
灵影 + 1 + 1 谢谢@Thanks!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Lxule + 1 没搞懂什么意思.
朱朱你堕落了 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ShenBohemian + 1 + 1 谢谢@Thanks!
Dongzi495 + 1 我很赞同!
温柔的一哥 + 1 + 1 热心回复!
也许我不够坚强 + 1 我很赞同!
陈世界 + 1 + 1 我很赞同!
crack5 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

卫国 发表于 2020-2-21 23:48
谢谢楼主分享
也许我不够坚强 发表于 2020-2-22 00:54
罗罗诺亚na 发表于 2020-2-22 04:21
SSxuaner 发表于 2020-2-22 05:18
woc  dalao!
头像被屏蔽
冰棍好烫啊 发表于 2020-2-22 08:25
提示: 作者被禁止或删除 内容自动屏蔽
jori 发表于 2020-2-22 08:58
网络验证的比较多,有时间也学习一下
xjlyg 发表于 2020-2-22 09:28
谢谢楼主
温柔的一哥 发表于 2020-2-22 10:01
虽然不太懂,但也要支持下。辛苦了~
ShenBohemian 发表于 2020-2-22 11:07
谢谢,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-18 04:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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