好友
阅读权限10
听众
最后登录1970-1-1
|
【先patch掉反调试线程。】
Class12.smethod_3(){【将其字节码直接改为2A即可】
object objectTmp = null;
IntPtr method = ldftn(smethod_9);
Thread thread = new Thread(new ParameterizedThreadStart(objectTmp, method));
thread.IsBackground = true;
thread.Start();
System.Threading.Thread.Sleep(1000);//注释掉....,确保 smethod_9 由充足时间运行
System.Environment.Exit(0);
}
【密码生成位置】
在 > mscorlib.dll!System.Text.Encoding.GetBytes(string s) 下断点:可以获取到有用的信息
Class0.smethod_0()
string password = Delegate40.smethod_0(text, Delegate40.delegate40_0);
调用 0x06000004 Class0.smethod_2(string string_0)
object object_ = Delegate56.smethod_0(delegate56_);
byte[] array2 = Delegate51.smethod_0(object_, string_0, delegate51_);
调用 0x0A00003A System.Text.Encoding.GetBytes
s "1F017EA6" string 当前字符串,这个每次均不一样,应该是与时间有关。
在 public Rfc2898DeriveBytes(string password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) 处下断点:此处的 password 就是密码。
比如此时结果就是:
2B200F200C200B200E200C200E202C200E202A200F200C200F202B200E200E20
Class2.Main()
Delegate112.smethod_0(new GForm0(), Delegate112.delegate112_0);
调用 Form.GForm0()
Delegate68.smethod_0(Delegate68.delegate68_0);///实际是 0x06000002,Class0.smethod_0()
string password;
byte[] array12;
byte[] array11 = Delegate43.smethod_0(new Rfc2898DeriveBytes(password, array12, Delegate20.smethod_0(10008.517193191416 - Delegate28.smethod_0(5000.0, Delegate28.delegate28_0), Delegate20.delegate20_0), Delegate42.smethod_0(Delegate42.delegate42_0)), Delegate20.smethod_0(31.6993677579761 + Delegate19.smethod_0(16.0, Delegate19.delegate19_0), Delegate20.delegate20_0), Delegate43.delegate43_0);
///一个疑问:password 是生命,但是没有赋值,怎么后面的password就有值了?
///可能是 dnSpy 将 IL 转换成 C# 代码的问题,查IL,得知该变量名称为 V_4,只有两处引用,
string password = Delegate40.smethod_0(text, Delegate40.delegate40_0);//生成密码。text 哪儿来的?
【密码校验位置】
输入 16 个空格,调试时候进行覆盖
GForm0.method_0(object sender, EventArgs e):按钮单击
Delegate70.smethod_0(Delegate69.smethod_0(this.textBox_0, Delegate69.delegate69_0), Delegate70.delegate70_0);
Delegate70--》0x06000003 Class0.smethod_1(string string_0)【string_0 输入字符串】
Delegate55.smethod_0(Delegate54.smethod_0(Class0.byte_0, string_0, Delegate54.delegate54_0), Delegate55.delegate55_0);
Delegate54--》Class0.smethod_3(byte[] byte_1, string string_0)
byte[] array3 = Delegate43.smethod_0(new Rfc2898DeriveBytes(string_0, salt, Delegate20.smethod_0(9993.6123577971557 - Delegate19.smethod_0(5000.0, Delegate19.delegate19_0), Delegate20.delegate20_0), Delegate42.smethod_0(Delegate42.delegate42_0)), Delegate20.smethod_0(36.0 - Delegate32.smethod_0(16.0, Delegate32.delegate32_0), Delegate20.delegate20_0), Delegate43.delegate43_0);
public Rfc2898DeriveBytes(string password, byte[] salt, int iterations, HashAlgorithmName hashAlgorithm) : this(new UTF8Encoding(false).GetBytes(password), salt, iterations, hashAlgorithm)
查看局部变量:
password " " string
直接 在其内存处,将 2B200F200C200B200E200C200E202C200E202A200F200C200F202B200E200E20 拷贝进去即可。
后面即可验证通过。
实在是不知道咋输入 空白字符。 |
免费评分
-
查看全部评分
|