吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7333|回复: 17
收起左侧

[原创] 内存搜索在算法分析中的应用。

  [复制链接]
whyida 发表于 2016-10-13 20:49
本帖最后由 whyIDA 于 2016-10-13 21:02 编辑

最近看了一个帖子 “Context Note v1.2 keygen “(http://www.52pojie.cn/thread-540829-1-1.html)有好几个回帖反应有点困难,所以我也下载下来看看到底难在哪里。
查壳是 upx,esp定律搞定没什么好说的。delphi3 编译的程序。然后就开始分析,按钮事件,堆栈回溯都不怎么好用,无法到达算法核心。经过无数次的f7,f8 以及下各
种的断点。发现了一点规律,在xp 可以下lstrcmpA断点 可以得到真码,在win7 下无效。只能想其它方法-内存搜索。具体过程如下:
od 打开Context Note,输入用户名,假码点确定弹出信息框后不要点确定。
捕获4.JPG

点击od 菜单栏内存(“m")按钮
捕获5.JPG
右键查找二进值字符串
捕获6.JPG
搜索用户名
捕获7.JPG
下内存访问断点
捕获8.JPG
搜索假码,真码就在旁边若隐若现
捕获8.JPG
捕获11.JPG
重新加载程序,输注册码,用户名点确定被断下。
捕获17.JPG
可以清晰的看到edx的假码
捕获18.JPG
用户名
捕获19.JPG
用户名+字符串“Context Note v1.x“ md5 加密。
捕获20.JPG
md5 值倒序
捕获21.PNG

具体算法是 :
1  用户名+字符串“Context Note v1.x“ md5 加密。
2  字符串倒序
3  取字符串3~7位做第一组密码,所有字母大写。
4  第一组密码 md5 加密,取字符串3~7位做第二组密码,所有字母大写。
5  第二组密码 md5 加密,取字符串3~7位做第三组密码,所有字母大写。
6  第三组密码 md5 加密,取字符串3~7位做第四组密码,所有字母大写。
捕获23.JPG
python源码
[Python] 纯文本查看 复制代码
import md5
s=""
s1=''
def KMD5(arg):

    m1=md5.new()
    m1.update(arg)
    s=m1.hexdigest()
    return s
def k1():
    arg1='whyida Context Note v1.x'#用户名可以改。
    
    s1=KMD5(arg1)
    alist=list(s1)
    alist.reverse()
    alist=alist[3:7]
    kong=""
    y=kong.join(alist)
    t=y.upper()
    return t    
    
def k2():
    t=k1()
    s2=KMD5(t)
    s2=list(s2)
    
    s2=s2[3:7]

    thing=""

    w=thing.join(s2)
    v=w.upper()
    return v

    
def k3():
    u=k2()
    s3=KMD5(u)

    s3=list(s3)
    s3=s3[3:7]
    
    tmp=""
    z=tmp.join(s3)
    q=z.upper()
    return q
def k4():
    p=k3()
    s4=KMD5(p)

    s4=list(s4)
    s4=s4[3:7]

    xmp=""
    x=xmp.join(s4)
    r=x.upper()
    return r
    
print(k1()+"-"+k2()+"-"+k3()+"-"+k4())


点评

学习一招内存搜索  发表于 2016-10-18 22:54

免费评分

参与人数 8热心值 +8 收起 理由
富春山居 + 1 谢谢@Thanks!
secowu + 1 谢谢@Thanks!
Sound + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lxcjy + 1 用心讨论,共获提升!
海盗小K + 1 我很赞同!
平淡最真 + 1 用心讨论,共获提升!
朱朱你堕落了 + 1 膜拜楼主,一定好好拜读!!!
榻榻米 + 1 看起来简单 写起来麻烦~

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| whyida 发表于 2016-10-15 10:07
Sound 发表于 2016-10-15 09:48
在输入用户名和注册码时  会压入用户名, 这时候可以在用户处这里 看程序对用户名什么时候写入 什么时候访问 ...

现在明码比较越来越少了。一般是用户名计算得到一串数字再和密码计算后得到的数字比较,相等al=1否则al=0
注册失败。内存搜索只要能找到用户名离算法就很近了。
Sound 发表于 2016-10-15 09:48
在输入用户名和注册码时  会压入用户名, 这时候可以在用户处这里 看程序对用户名什么时候写入 什么时候访问,  做了什么操作。
最关键的是 使用了cmpstring , 属于程序设计的逻辑漏洞,跟Delphi 3没什么关系。
zhangbaida 发表于 2016-10-13 21:01
 楼主| whyida 发表于 2016-10-13 21:05
zhangbaida 发表于 2016-10-13 21:01
很不错的分析呀,学习了

delphi3的程序现在不容易见到。提供一个参考。
niutou20 发表于 2016-10-13 21:13
学习了!感谢1!!!!
朱朱你堕落了 发表于 2016-10-13 21:20
楼主辛苦了,感谢分享精彩分析!!!
 楼主| whyida 发表于 2016-10-13 21:23
hahacker 发表于 2016-10-13 21:20
楼主辛苦了,感谢分享精彩分析!!!

delphi 程序调用内部的类或方法,到汇编代码上就是连续几层call ,用常规方法确实繁琐。

免费评分

参与人数 1热心值 +1 收起 理由
朱朱你堕落了 + 1 写个文章不容易,再给楼主个热心!!!期待楼主更多精彩文章!!

查看全部评分

 楼主| whyida 发表于 2016-10-13 21:30
whyida 发表于 2016-10-13 21:23
delphi 程序调用内部的类或方法,到汇编代码上就是连续几层call ,用常规方法确实繁琐。

写文章确实比调试累,第一次图片没了,又重改了一次。
朱朱你堕落了 发表于 2016-10-14 20:52
测试了N遍,只有一次成功断到内存断点。。这种方法太不稳定了,成功率太低,楼主可有别的高招?
 楼主| whyida 发表于 2016-10-15 07:27
hahacker 发表于 2016-10-14 20:52
测试了N遍,只有一次成功断到内存断点。。这种方法太不稳定了,成功率太低,楼主可有别的高招?

xp下万能断点试试看。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 10:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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