-
MFC ASP网络验证技术
大家好,我是cooling 今天就asp网络验证做一个介绍
基本模式是这样 客户端–>提交数据–>asp验证文件–>查询数据库–>返回false或true
那么这是一个基本get提交的网络验证模型,但很容易被模拟破解掉!
我们现在来看一个asp提交的数据
Set Rs = Conn.ExeCute(“Select * From [User] Where UserName = ‘”& UserName &”‘ And UserPassWord=’”& UserPassWord &”‘”)
If Rs.Eof And Rs.Bof Then这句话 在login.asp文件里面 是通过conn.asp链接数据库 然后查询username password字段里面的内容 username password也就是字段名了
Conn.asp 文件内容
<%
db = “./data/8da449528949b3699.mdb”
strCon=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” & Server.MapPath(db)On Error Resume Next
Set conn = Server.CreateObject(“ADODB.Connection”)
conn.ConnectionTimeout = 10 ‘设置连接超时 这里设定连接超时为10秒
conn.Open strCon
If conn.Errors.Count <> 0 Then ‘判断是否正常连接 0 为非正常连接
conn.close
set conn=Nothing
response.write “数据库连接错误,请仔细检查数据库连接!”
response.end
End Ifsub CloseConn()
conn.close
set conn=Nothing
End Sub
%>那么通过这个语句 我们可以得知 提交的链接为URL/login.asp?UserName=xxxxx&PassWord=xxxxx
基本上都是明文 很容易就可以模拟返回的数据 本地搭建asp验证服务器 然后修改hosts文件 把域名的IP 指向到本地就可以了
当然了 首先还是得抓包 得到login.asp文件存在的路径 也就是确定下 他是在网站的根目录 还是子目录下。
以下是提交数据的截图
在我这个截图里面,asp验证文件在网站的根目录下 提交的数据 账户密码分别为hacker 返回 用户名或密码错误
说明 在我们的数据库里面 并没有这个ID和密码存在。在C++里面 如果asp文件返回的是 用户名或密码错误
那么这时候做一个if语句判断 可以根据自己的思想写code 让MFC登录框不关闭 返回false就可以了
在网络上下载了一个darkshell程序 经过抓包 发现他提交的信息是经过加密的
看样子 作者是为了防止被Cracker吧 说到防止软件被破解 并且基于mfc asp网络验证模型的
我们也可以参考这款darkshell程序 提交的信息加密下 然后在asp里面实现解密 然后再查询数据库就OK了
至于加密算法 如果程序是针对国内用户的 那么可以采用时间戳加密算法 但防止破解 被anti 还得在C++代码里面下功夫
首先 当返回数据的时候 CRC校验数据是否完整,然后 解析返回信息的那个域名(为了方便移动验证端 很多都采用动态域名解析 方便后期管理)
解析域名IP是否为127.0.0.1 如果为真 则软件关闭, 如果不为127.0.0.1 在hosts里面 写自己的外网IP也是可以的 那么就ping 域名 得到
time=xxms信息 如果低于10以下 基本可以确定为异常登录 如果破解者解析的IP 为自己的外网IP 那么这个time=值 基本上小于5以下
如果ping域名 得到的time信息 大于10 那么就反DNS 解析得到的IP 看在这个IP上面 是否有验证域名存在 如果有的话 说明是授权用户登录
这样的话 破解者估计要在本地搭建dns服务了, 我看到还有破解者 使用劫持ws2_32.dll的方法进行破解,我们可以在程序初始化的时候
遍历当前目录下 是否存在dll文件 如果存在 就删除掉 因为是这样的 Windows下的程序 在最先启动的时候 都会加载dll文件
如果在当前目录 就会加载的 如果不在当前目录 那么就加载system32目录下的dll文件,所以 得想办法把dll删除掉才可以
不允许dll存在 当然 我这是针对独立exe程序的防破解 如果你的程序在当前目录下也存在dll文件 如你的插件之类的
那么你可以提权写注册表 写加载dll绝对路径 最后一步 检测hosts文件 看下是否验证域名被人本地修改了!
针对mfc asp网络验证 基本上理解的都写出来了 希望对跟我一样菜的人 有点帮助吧 如果有写的不对的地方
欢迎指正。如果有其他方式被破解的方法 欢迎大侠们指点一二!!
2 条评论 -
Dim fso, MyFile
Dim fso, MyFile
Set fso =
CreateObject(“Scripting.FileSystemObject”)
Set MyFile =
fso.CreateTextFile(“c:\testfile.txt”, True)
MyFile.WriteLine(“This is a
test.”)
MyFile.Close
Set MyFile =
fso.GetFile(“c:\testfile.txt”)
MyFile.Copy (“E:\test2.txt”) -
C++自定义函数strrev
当某XXX San到某.exe的时候 他被杀了
可以除代码重构之外
还可以自定义函数.实现无函数操作#include “stdafx.h”
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>void Mystrrev(char*
s)
{
int len = strlen(s);
char* pNewStr = (char*)malloc(len + 1)
;
char* pNewMove =
pNewStr;
char* pStr = s +
len – 1;
while(pStr >=
s)
{
unsigned char ch = *pStr;
if(ch > 127) //中文判断
不太确定,这个条件是否严谨,在本机测试没问题
{
*pNewMove = *(pStr – 1);
pNewMove ++;
*pNewMove= *pStr;
pNewMove ++;pStr -= 2;
}else
{
*pNewMove =*pStr;
pNewMove ++;
pStr–;
}
}
pNewStr[len] = ‘\0′;
strcpy(s,pNewStr);
free(pNewStr);
}int main(int argc, char*
argv[])
{
char *strFirst =
“eliFdaeRtenretnI”;
Mystrrev(strFirst);
printf(“%s\n”,strFirst);
system(“pause”);
return 0;
} -
源代码免杀数字四引擎之自定义strlwr函数
在过数字四引擎的时候 定位到了一个strlwr函数
原型:extern char *strlwr(char *s);
用法:#include
<string.h>
功能:将字符串s转换为小写形式说明:只转换s中出现的大写字母,不改变其它字符。返回指向s的指针。
那么于是乎自定义去实现这个函数的用法#include <stdio.h>
char* Mystrlwr(char
*s)
{unsigned char AL;
register char *DX,*SI;
DX=SI=s;
while((AL=*SI++)!=’\0′)
{
AL-=’A';
if(AL>’Z'-’A')continue;
SI[-1]+=’a'-’A';}
return DX;
}经过测试 载入c32asm之后 搜索这个函数
没有了同样可以达到目的 并且修改之后免杀了!
-
世界,你好!
欢迎使用 WordPress。这是系统自动生成的演示文章。编辑或者删除它,然后开始您的博客!


