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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3415|回复: 60

[原创] 某CTF大赛赛题JunkCode逆向笔记

  [复制链接]
发表于 2017-11-5 21:17 | 显示全部楼层
本帖最后由 凉游浅笔深画眉 于 2017-11-5 21:29 编辑

朋友发了一个CTF逆向题给我,就一个压缩包,没告诉我题目要求,是别人给他的,不清楚哪里下载的。于是一顿分析先看看软件流程!
本菜技术有限,若有失误之处,望大牛指正!

1.首先打开压缩包看到两个文件
1.png


2.不管三七二十一丢到IDA里找到Main函数入口先看看流程!
2.png


3.F5反汇编成C代码发现提示错误
3.png


4.既然报错了,那我们分析下报错原因,肯定是作者对软件动了手脚!拉到下面看到如下代码!
这是一段混淆过后的代码,IDA无法区分是代码还是数据!
4.png


5.我们拖到OD中看看这段花指令原型!可以看到该花指令并不复杂,删除分析后能很清楚判断是作者用内联汇编实现的!
6.png


7.png


6.找到了问题根源就好办了,我们直接把这些大段大段的花指令全部NOP掉!
8.png


7.当把所有的花指令全部清除之后,我们再放到IDA中,对Main函数F5试试,伪代码出来了!
9.png


8.下一步分析软件执行流程!通过逆向可知软件同目录下需要一个名字叫Flag的文件,里面存放key,软件打开的同时读取这个key,软件对Key进行加密,加密后输出的内容需要和同路径下flag.enc文件里的内容相同则攻击成功!
同时还分析出该程序使用了C++两个标准库!
10.png


11.png


9.对于库函数的识别需要凭借经验,如果被当成了作者写的函数,那么就会绕很大的弯路了!
慢慢长征路,才走了两三步,接下来要对后面的代码挨着分析!这里花费了我好几个小时才分析完毕!
12.png


10.下面对整个软件大体流程的逆向分析结果!
13.png


14.png


16.png


11.主程序中有两个算法,分别是Base64和一个作者自定义的算法!Base64特征很好判断,加密后的文本带"==",长度暴增,那么就是Base64了!
17.png


18.png


12.另外还有一个算法,这个算法是作者自己写的,IDA分析起来有点吃力,需要结合动态调试更容易逆向出算法!
该算法内部初始化了一个Base64Map的数据表(我自己这么叫的),表内容为:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
依次对Main里面四次Base64加密后的密文逐位取下标,找到在这个Base64Map中对应的下标!将所有的下标新建成一个新的数组!
19.png


21.png


13.最后把这个数组转成文本,对每一位+0x10输出
22.png


14.知道了软件执行流程,那么我们将这个软件全部逆向成源代码也不是什么难事了!
这里我用C#作为开发语言!因为C#写代码比C++快,很多内置的算法比如Base64.
下面是整个程序运行流程:
[C#] 纯文本查看 复制代码
 /// <summary>
/// 字符串加密
/// </summary>
/// <param name="sourceListChar"></param>
/// <returns></returns>
static List<byte> EncryptStr(List<char> sourceListChar) 
{
string base64Map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int a = base64Map.Length;
List<byte> resultStr = new List<byte>();
for (int i = 0; i < sourceListChar.Count; i++)
{
if (i%4 ==0) 
{
List<int> listIndex = new List<int>();
for (int k = i; k < i+4; k++)
{
listIndex.Add(base64Map.IndexOf(sourceListChar[k]));
}

string v14 = Convert.ToString(((listIndex[1] & 0x30) >> 4) + 4 * listIndex[0], 16).PadLeft(2, '0');
string v15 = Convert.ToString(((listIndex[2] & 0x3C) >> 2) + 16 * (listIndex[1] & 0xF),16).PadLeft(2, '0');
string v16 = Convert.ToString(listIndex[3] + ((listIndex[2] & 3) << 6), 16).PadLeft(2, '0');
resultStr.Add(Convert.ToByte(v14[0]));
resultStr.Add(Convert.ToByte(v14[1]));
resultStr.Add(Convert.ToByte(v15[0]));
resultStr.Add(Convert.ToByte(v15[1]));
resultStr.Add(Convert.ToByte(v16[0]));
resultStr.Add(Convert.ToByte(v16[1]));
}

}
return resultStr;
}
/// <summary>
/// 入口函数
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//软件的加密流程
string path=System.Environment.CurrentDirectory + @"\Flag";
if(!File.Exists(path))
{
Console.WriteLine("error in open flag.");
return;
}
byte[] fileBytes= File.ReadAllBytes(path);
string base64EnResult = Convert.ToBase64String(fileBytes);
for (int i = 0; i < fileBytes.Length; ++i)
{
fileBytes[i] += 0x40;
}
string add0x40EncryptResult = Convert.ToBase64String(fileBytes);
for (int i = 0; i < fileBytes.Length; ++i)
{
fileBytes[i] <<= 0x7;
}
string shl0x07EncryptResult = Convert.ToBase64String(fileBytes);
for (int i = 0; i < fileBytes.Length; ++i)
{
fileBytes[i] -= 0x9E;
}
string sub0x9EEncryptResult = Convert.ToBase64String(fileBytes);
List<char> listByte = new List<char>();
for (int i = 0; i < base64EnResult.Length; i++)
{
if (base64EnResult[i] == '=') 
{
break;
}
listByte.Add(base64EnResult[i]);
listByte.Add(add0x40EncryptResult[i]);
listByte.Add(sub0x9EEncryptResult[i]);
listByte.Add(shl0x07EncryptResult[i]);
}
List<byte> encryptResult = EncryptStr(listByte);
string printStr = string.Empty;
for (int i = 0; i < encryptResult.Count; i++)
{
printStr += char.ConvertFromUtf32(encryptResult[i] + 0x10);
}
Console.WriteLine(printStr);
Console.WriteLine();
Console.WriteLine();


}


15.软件流程已经全部知晓,那么我们逆推算法解出注册码就行!这个逆推过程也比较费脑子,大概花了我两个小时才完成!
[C#] 纯文本查看 复制代码
/// <summary>
/// 字符串解密
/// </summary>
/// <param name="sourceListChar"></param>
/// <returns></returns>
static void DecryptStr(string sourceListChar) 
{
Console.WriteLine("要解密的Key:"+sourceListChar);
string base64Map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
List<byte> listByte = new List<byte>();
for (int i = 0; i < sourceListChar.Length; i++)
{
listByte.Add(Convert.ToByte(Convert.ToInt32(sourceListChar[i]) - 0x10));
}
List<byte> listCharNew = new List<byte>();
Console.WriteLine();
for (int i = 0; i < listByte.Count; i+=6)
{
char a = Convert.ToChar(listByte[i]);
char b = Convert.ToChar(listByte[i+1]);
int ab =Convert.ToInt32(Convert.ToString(a) +Convert.ToString(b),16);
char c = Convert.ToChar(listByte[i+2]);
char d = Convert.ToChar(listByte[i + 3]);
int cd = Convert.ToInt32(Convert.ToString(c) + Convert.ToString(d), 16);
char e = Convert.ToChar(listByte[i+4]);
char f = Convert.ToChar(listByte[i+5]);
int ef = Convert.ToInt32(Convert.ToString(e) + Convert.ToString(f), 16);
for (int i_1 = 0; i_1 < 64; i_1++)
{
for (int i_2 = 0; i_2 < 64; i_2++)
{
for (int i_3 = 0; i_3 < 64; i_3++)
{
for (int i_4 = 0; i_4 < 64; i_4++)
{
if(((i_2 & 0x30) >> 4) + 4 * i_1 == ab)
{
if(((i_3 & 0x3C) >> 2) + 16 * (i_2 & 0xF) == cd)
{
if(i_4 + ((i_3 & 3) << 6)==ef)
{
listCharNew.Add(System.Text.Encoding.ASCII.GetBytes(base64Map.Substring(i_1, 1))[0]);
listCharNew.Add(System.Text.Encoding.ASCII.GetBytes(base64Map.Substring(i_2, 1))[0]);
listCharNew.Add(System.Text.Encoding.ASCII.GetBytes(base64Map.Substring(i_3, 1))[0]);
listCharNew.Add(System.Text.Encoding.ASCII.GetBytes(base64Map.Substring(i_4, 1))[0]);
Console.Write(base64Map.Substring(i_1,1));
Console.Write(base64Map.Substring(i_2, 1));
Console.Write(base64Map.Substring(i_3, 1));
Console.Write(base64Map.Substring(i_4, 1));
}
}
}


}

}
}
}
}
Console.WriteLine();
Console.WriteLine();
string str = string.Empty;
for (int i = 0; i < listCharNew.Count; i += 4)
{
str += char.ConvertFromUtf32(listCharNew[i]).ToString();
}
byte[] aaa = Convert.FromBase64String(str+"=");
Console.WriteLine("注册码:" + System.Text.Encoding.ASCII.GetString(aaa)); 
}

/// <summary>
/// 入口函数
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//软件的解密流程
string miwen = "FFIF@@IqqIH@sGBBsBHFAHH@FFIuB@tvrrHHrFuBD@qqqHH@GFtuB@EIqrHHCDuBsBqurHH@EuGuB@trqrHHCDuBsBruvHH@FFIF@@AHqrHHEEFBsBGtvHH@FBHuB@trqrHHADFBD@rquHH@FurF@@IqqrHHvGuBD@tCDHH@EuGuB@tvrrHHCDuBD@tCDHH@FuruB@tvrIH@@DBBsBGtvHH@GquuB@EIqrHHvGuBsBtGEHH@EuGuB@tvrIH@BDqBsBIFEHH@GFtF@@IqqrHHEEFBD@srBHH@GBsuB@trqrHHIFFBD@rquHH@FFIuB@tvrrHHtCDB@@";
DecryptStr(miwen);
Console.ReadLine();
}


15.附上整个程序代码
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace JunkCode.Demo
{
class Program
{
/// <summary>
/// 字符串加密
/// </summary>
/// <param name="sourceListChar"></param>
/// <returns></returns>
static List<byte> EncryptStr(List<char> sourceListChar) 
{
string base64Map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int a = base64Map.Length;
List<byte> resultStr = new List<byte>();
for (int i = 0; i < sourceListChar.Count; i++)
{
if (i%4 ==0) 
{
List<int> listIndex = new List<int>();
for (int k = i; k < i+4; k++)
{
listIndex.Add(base64Map.IndexOf(sourceListChar[k]));
}

string v14 = Convert.ToString(((listIndex[1] & 0x30) >> 4) + 4 * listIndex[0], 16).PadLeft(2, '0');
string v15 = Convert.ToString(((listIndex[2] & 0x3C) >> 2) + 16 * (listIndex[1] & 0xF),16).PadLeft(2, '0');
string v16 = Convert.ToString(listIndex[3] + ((listIndex[2] & 3) << 6), 16).PadLeft(2, '0');
resultStr.Add(Convert.ToByte(v14[0]));
resultStr.Add(Convert.ToByte(v14[1]));
resultStr.Add(Convert.ToByte(v15[0]));
resultStr.Add(Convert.ToByte(v15[1]));
resultStr.Add(Convert.ToByte(v16[0]));
resultStr.Add(Convert.ToByte(v16[1]));
}

}
return resultStr;
}

/// <summary>
/// 字符串解密
/// </summary>
/// <param name="sourceListChar"></param>
/// <returns></returns>
static void DecryptStr(string sourceListChar) 
{
Console.WriteLine("要解密的Key为:");
Console.WriteLine(sourceListChar);
string base64Map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
List<byte> listByte = new List<byte>();
for (int i = 0; i < sourceListChar.Length; i++)
{
listByte.Add(Convert.ToByte(Convert.ToInt32(sourceListChar[i]) - 0x10));
}
List<byte> listCharNew = new List<byte>();
Console.WriteLine();
Console.WriteLine("第一次解密下标密码表:");
for (int i = 0; i < listByte.Count; i+=6)
{
char a = Convert.ToChar(listByte[i]);
char b = Convert.ToChar(listByte[i+1]);
int ab =Convert.ToInt32(Convert.ToString(a) +Convert.ToString(b),16);
char c = Convert.ToChar(listByte[i+2]);
char d = Convert.ToChar(listByte[i + 3]);
int cd = Convert.ToInt32(Convert.ToString(c) + Convert.ToString(d), 16);
char e = Convert.ToChar(listByte[i+4]);
char f = Convert.ToChar(listByte[i+5]);
int ef = Convert.ToInt32(Convert.ToString(e) + Convert.ToString(f), 16);
for (int i_1 = 0; i_1 < 64; i_1++)
{
for (int i_2 = 0; i_2 < 64; i_2++)
{
for (int i_3 = 0; i_3 < 64; i_3++)
{
for (int i_4 = 0; i_4 < 64; i_4++)
{
if(((i_2 & 0x30) >> 4) + 4 * i_1 == ab)
{
if(((i_3 & 0x3C) >> 2) + 16 * (i_2 & 0xF) == cd)
{
if(i_4 + ((i_3 & 3) << 6)==ef)
{
listCharNew.Add(System.Text.Encoding.ASCII.GetBytes(base64Map.Substring(i_1, 1))[0]);
listCharNew.Add(System.Text.Encoding.ASCII.GetBytes(base64Map.Substring(i_2, 1))[0]);
listCharNew.Add(System.Text.Encoding.ASCII.GetBytes(base64Map.Substring(i_3, 1))[0]);
listCharNew.Add(System.Text.Encoding.ASCII.GetBytes(base64Map.Substring(i_4, 1))[0]);
Console.Write(base64Map.Substring(i_1,1));
Console.Write(base64Map.Substring(i_2, 1));
Console.Write(base64Map.Substring(i_3, 1));
Console.Write(base64Map.Substring(i_4, 1));
}
}
}


}

}
}
}
}
Console.WriteLine();
Console.WriteLine();
string str = string.Empty;
for (int i = 0; i < listCharNew.Count; i += 4)
{
str += char.ConvertFromUtf32(listCharNew[i]).ToString();
}
byte[] aaa = Convert.FromBase64String(str+"=");
Console.WriteLine("注册码:" + System.Text.Encoding.ASCII.GetString(aaa)); 
}

/// <summary>
/// 入口函数
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//软件的加密流程
string path = System.Environment.CurrentDirectory + @"\Flag";
if (!File.Exists(path))
{
Console.WriteLine("error in open flag.");
return;
}
byte[] fileBytes = File.ReadAllBytes(path);
string base64EnResult = Convert.ToBase64String(fileBytes);
for (int i = 0; i < fileBytes.Length; ++i)
{
fileBytes[i] += 0x40;
}
string add0x40EncryptResult = Convert.ToBase64String(fileBytes);
for (int i = 0; i < fileBytes.Length; ++i)
{
fileBytes[i] <<= 0x7;
}
string shl0x07EncryptResult = Convert.ToBase64String(fileBytes);
for (int i = 0; i < fileBytes.Length; ++i)
{
fileBytes[i] -= 0x9E;
}
string sub0x9EEncryptResult = Convert.ToBase64String(fileBytes);
List<char> listByte = new List<char>();
for (int i = 0; i < base64EnResult.Length; i++)
{
if (base64EnResult[i] == '=')
{
break;
}
listByte.Add(base64EnResult[i]);
listByte.Add(add0x40EncryptResult[i]);
listByte.Add(sub0x9EEncryptResult[i]);
listByte.Add(shl0x07EncryptResult[i]);
}
List<byte> encryptResult = EncryptStr(listByte);
string printStr = string.Empty;
Console.WriteLine("加密结果为:");
for (int i = 0; i < encryptResult.Count; i++)
{
printStr += char.ConvertFromUtf32(encryptResult[i] + 0x10);
}
Console.WriteLine(printStr);
Console.WriteLine();
Console.WriteLine();
//软件的解密流程
string miwen = "FFIF@@IqqIH@sGBBsBHFAHH@FFIuB@tvrrHHrFuBD@qqqHH@GFtuB@EIqrHHCDuBsBqurHH@EuGuB@trqrHHCDuBsBruvHH@FFIF@@AHqrHHEEFBsBGtvHH@FBHuB@trqrHHADFBD@rquHH@FurF@@IqqrHHvGuBD@tCDHH@EuGuB@tvrrHHCDuBD@tCDHH@FuruB@tvrIH@@DBBsBGtvHH@GquuB@EIqrHHvGuBsBtGEHH@EuGuB@tvrIH@BDqBsBIFEHH@GFtF@@IqqrHHEEFBD@srBHH@GBsuB@trqrHHIFFBD@rquHH@FFIuB@tvrrHHtCDB@@";
DecryptStr(miwen);
Console.ReadLine();
}
}
}


16.最终运行注册码为:flag{juck_code_cannot_stop_you_reversing}
24.png

附加里是攻击目标:
juckcode_abc8bebe436a5e56a8a837d760269f1b.zip (17.25 KB, 下载次数: 21)

免费评分

参与人数 25吾爱币 +26 热心值 +24 收起 理由
bitglass + 1 + 1 我很赞同!
po1718 + 1 + 1 谢谢@Thanks!
zysanjing + 1 + 1 用心讨论,共获提升!
小_Ta + 1 + 1 谢谢@Thanks!
z1220197 + 1 + 1 用心讨论,共获提升!
siuhoapdou + 1 + 1 谢谢@Thanks!
hoory + 1 + 1 谢谢@Thanks!
我爱lyw + 1 谢谢@Thanks!
no_one + 1 + 1 用心讨论,共获提升!
爬爬山 + 1 + 1 谢谢@Thanks!
chkds + 1 + 1 谢谢@Thanks!
SomnusXZY + 1 + 1 热心回复!
XhyEax + 2 + 1 大哥你能不能正常使用标点符号。。。
xr5101616 + 1 + 1 谢谢@Thanks!
helloword121 + 1 + 1 谢谢@Thanks!
ghostfish + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
610100 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhan + 1 + 1 厉害
wisoft + 1 用心讨论,共获提升!
rlm96163 + 1 + 1 用心讨论,共获提升!
whklhh + 1 + 1 用心讨论,共获提升!
490694561 + 1 + 1 太强了,我已经双膝跪地
52鱼鱼 + 1 + 1 用心讨论,共获提升!
lies2014 + 1 + 1 用心讨论,共获提升!
MXWXZ + 2 + 1 巨佬

查看全部评分

本帖被以下淘专辑推荐:

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 23:16 | 显示全部楼层
辛苦了,想问一下你ODNOP是全部自己手动的?那么多花指令一个一个操作?
我比赛的时候因为不会去花,所以直接OD跟,观察字符串的结果来猜测,大概一两个小时就能做出来:
前面三次b64从结果很好看出来,中间的处理汇编就一行,扒下来就好。
然后第12步所谓作者自己写的算法,那个表就是b64的64个字符表,整个函数其实就是b64decode……
然后转ASCII,再+0x10就出来了……
所以总结一下算法就是四次b64encode,合并成一个字符串后b64decode,再转ascii+0x10
PY脚本写起来很简单_(:з」∠)_
[Python] 纯文本查看 复制代码
s = "FFIF@@IqqIH@sGBBsBHFAHH@FFIuB@tvrrHHrFuBD@qqqHH@GFtuB@EIqrHHCDuBsBqurHH@EuGuB@trqrHHCDuBsBruvHH@FFIF@@AHqrHHEEFBsBGtvHH@FBHuB@trqrHHADFBD@rquHH@FurF@@IqqrHHvGuBD@tCDHH@EuGuB@tvrrHHCDuBD@tCDHH@FuruB@tvrIH@@DBBsBGtvHH@GquuB@EIqrHHvGuBsBtGEHH@EuGuB@tvrIH@BDqBsBIFEHH@GFtF@@IqqrHHEEFBD@srBHH@GBsuB@trqrHHIFFBD@rquHH@FFIuB@tvrrHHtCDB@@"
s1=""
for i in s:
    s1 += (chr(ord(i)-0x10))
s2=b''
s2 = bytes.fromhex(s1)
s3 = base64.b64encode(s2)
s4 = ''
for i in range(len(s3)//4):
    s4 += hex(s3[i*4])[2:]
s4 = bytes.fromhex(s4)
print(s4)
for i in range(4-(len(s4)%4)):
    s4 += b'='
s5 = base64.b64decode(s4)
print(s5)

免费评分

参与人数 2吾爱币 +4 收起 理由
chkds + 1 我很赞同!
凉游浅笔深画眉 + 3 我很赞同!

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 21:25 | 显示全部楼层
文章写得很好,但题外话不符合论坛规定,自己编辑掉吧,有问题在论坛交流,也能给后人留下宝贵的学习过程。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 21:20 | 显示全部楼层

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 21:26 | 显示全部楼层
很好,感谢楼主提供分享!!!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 21:32 | 显示全部楼层
一直在学习 感谢楼主分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 21:32 | 显示全部楼层
画眉从菜鸟到高手转眼间

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 21:50 | 显示全部楼层
嗯……从菜鸟到大能,只需要滚动一下鼠标滚轮……

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 22:04 | 显示全部楼层
好详细,先收下!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 22:38 | 显示全部楼层
本帖最后由 6767 于 2017-11-6 03:09 编辑

这一定是某海大学生xxx比赛hhhh


===
这里可以做做C++的类识别和库函数识别分析

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2017-11-5 22:51 | 显示全部楼层
虽然不是很懂 还是看完了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:Service@52PoJie.Cn

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

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

GMT+8, 2017-11-24 02:30

Powered by Discuz!

© 2001-2017 Comsenz Inc.

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