文档章节

crackme4算法分析记录

enimey
 enimey
发布于 2014/03/31 13:14
字数 424
阅读 110
收藏 3

下载地址:http://pan.baidu.com/s/1jGv9FO6

软件界面如下:

image

验证成功后,返回success!

软件是加壳了的,用esp定律+单步,很容易完成脱壳。

由于是win32控制台程序,和之前的窗口程序稍微有点不同。很明显,我们需要在获取用户输入的api处下断点,用 bpx gets(在所有调用gets函数的地方下断点)下断。

算法很简单,这次我没有仔细用od跟算法,是在od找到算法的地址,然后直接用ida的f5看的伪代码。

直接贴一下注册算法,留以备用:

#coding=gbk
userName = input('请输入用户名(只能输入5位字母):')
mid1Passwd = ''
passwd = ''
index = 0
tuple = (0x76, 0x03, 0x40, 0x70, 0x02, 0x55, 0x5B, 0x5B, 0x05, 0x64)
al = 0
dl = 0
if len(userName) != 5 :
	print('用户名输入错误!')
	exit()
for i in userName :
	if ord(i) <= 96 or ord(i) > 122 :
		if ord(i) > 64 and ord(i) <= 90 :
			mid1Passwd += chr(((ord(i) - 65) * 7 + 13) % 26 + 65)
		else :
			print('用户名输入错误!')
			exit()
	else :
		mid1Passwd += chr(((ord(i) -97) * 7 + 13) % 26 + 65)
print(mid1Passwd)
		
for i in mid1Passwd :
	dl = (((((0x00280000 +ord(i)) * 0x67) & 0x0000ffff) >> 0x8) & 0x000000ff) >> 0x2
	al = ord(i) >> 0x7
	passwd += chr((dl -al + 0x30) ^ tuple[index])
	index += 1
	passwd += chr((ord(i) - (((dl - al) << 0x2) + (dl - al)) * 2 + 0x30) ^ tuple[index])
	index += 1
print('密码为:' + passwd)

PS:虽然算法很简单,但是还是一些小技巧:1,算法并没有在开始检查用户名的长度,而是在后面验证密码时,通过验证的循环次数控制了用户名的长度;2,算法为了不直接将"success"字符串硬编码到程序中,而是采取了将其他乱码形式的字符串以某种算法而生成"success"、“sorry”等提示信息。

© 著作权归作者所有

共有 人打赏支持
enimey
粉丝 15
博文 18
码字总数 12299
作品 0
成都
Mahout安装与配置笔记

一、硬件环境 操作系统:Linux ubuntu-13.04-desktop-i386 jdk安装版本:jdk-7u51-linux-i586 Hadoop版本:Hadoop-1.1.1(一个Namenode,三个Datanode部署) 二、安装步骤 在Mahout安装之前读...

kartik
2014/06/01
0
0
MySQL的JOIN(二):JOIN原理

表连接算法 Nested Loop Join(NLJ)算法: 首先介绍一种基础算法:NLJ,嵌套循环算法。循环外层是驱动表,循坏内层是被驱动表。驱动表会驱动被驱动表进行连接操作。首先驱动表找到第一条记录...

文文1
04/01
0
0
冒泡排序(Bubble Sort)

1、定义 冒泡排序(Bubble Sort)是一种交换排序。 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 2、基本思想 两两比较待排序记录的关键字,发现两个记录的次序相反时即进行...

野渡书生
2016/04/29
29
0
算法导论第二章小试牛刀

Author: bakari   Date: 2015.9.11 《算法导论》真是一本让人又爱又恨的书,爱自然是因为它精简凝练的算法呈现,读来让人欲罢不能;至于恨,是因为它在进行算法分析的时候所体现的数学思想...

chambai
2015/09/11
0
0
内排序及时间复杂度分析-插入排序&选择排序&交换排序&归并排序&分配和索引排序对比

基本概念 什么是排序? 排序 将序列中的记录按照排序码顺序排列起来 排序码域的值具有不减(或不增)的顺序 内排序 整个排序过程在内存中完成 给定一个序列 R = { r1, r2, ...,rn } 其排序码分...

tcfellow
07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

git +STS使用问题解决一

1. 2.点以一个pull就是更新代码 3.synchronize workSpace 同步代码,同SVN一致

森火
6分钟前
0
0
powerBi odbc 连接impala 实现自助分析

配置Impala以使用ODBC 可以将第三方产品设计为使用ODBC与Impala集成。为获得最佳体验,请确保支持您打算使用的任何第三方产品。验证支持包括检查Impala,ODBC,操作系统和第三方产品的版本是...

hblt-j
11分钟前
0
0
Purism FAQ

<font size="37" color="#006248" face="幼圆"> <p align="center"> Purism FAQ </p> </font> 原文:https://puri.sm/faq/ 原作者:Purism Team 翻译者:冰焰火灵X 1079092922@qq.com 文章许......

ICE冰焰火灵X
26分钟前
0
0
nginx+webdav

1、配置Nginx以支持WebDav: Webdav是nginx一个组件,默认编译nginx时是没有安装这个组件的。 如果跟应用公用一个nginx,需要重新编译安装nginx,重新安装前需要备份好原来的nginx.conf。 1....

yaukie
32分钟前
0
0
spring 事件

ContextRefreshedEvent Event raised when an {@code ApplicationContext} gets initialized or refreshed. ContextClosedEvent Event raised when an {@code ApplicationContext} gets clos......

Canaan_
43分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部