欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

Native部分的注册算法分析

Native部分的注册算法分析

Native部分
错误提示信息为  Invalid license key
通过IDA Pro 查找,(针对 64bit Mac OS X 动态库)
找到引用 这个字符串类的地方,在 方法 LiveProfiling::initCommunication(JNIEnv *) 中
会进行打印操作,那么我们定位逻辑,到底从哪里来得。
这个流程是通过 LiveProfilingSession::initParameters(JNIEnv *) 这个方法的返回值进行
处理的。那么进入这个部分 LiveProfilingSession::initParameters(JNIEnv *) 
仔细找找能够发现 LicenseChecker::checkLicenseKey(char *, bool) 这个方法,
那么以后就着重 LicenseChecker C++ 类进行分析了。
64位汇编中经常有 rbx, r12d 这种,不明白,
这样也导致了最终注册机没有采用全部独立编写的问题。
LicenseChecker::checkLicenseKey 的逻辑
{
    License:String
    if(license startsWith("FLOAT")){
      // goto FLOAT license check
    }else{
         char ch = license charAt(0);
         if(ch == 'A'){
               // 正式版
               LicenseChecker::checkNormalLicense(license)
         }else{
               // 试用版
         }
    }
}
LicenseChecker::checkNormalLicense(license) 逻辑
{
    license countDashes 获取 - 个数
    if(count > 3){
        LicenseChecker::isChecksumValid(license);
    }
}
 LicenseChecker::isChecksumValid(license) 逻辑
{
    strrchr 查找 license 最后一个 - 的位置
    计算这个之前的个数
    必须大于4
    if(len > 4){
         int crcValue;
         clearCRC32(&crcValue);  // crcValue = -1
         addCrc32b(&crcValue, license, len);   // 最后一个 - 之前的内容加到 crcValue中
         addCrc32b(&crcValue, "jprofiler version key1", ""len); // 插入特定版本的key1
         tempCRC = 0;
         getCRC32(&tempCRC, &crcValue); // 将 crcValue中数值处理到 tempCRC
         clearCRC32(&crcValue);  // crcValue = -1
         addCrc32b(&crcValue, license, len);   // 最后一个 - 之前的内容加到 crcValue中
         addCrc32b(&crcValue, "jprofiler version key2", ""len); // 插入特定版本的key2
         tempCRC2 = 0;
         getCRC32(&tempCRC2, &crcValue); // 将 crcValue中数值处理到 tempCRC 
         var10:String
         var20:String
         LicenseChecker::calculateChecksum(tempCRC, var10, true); // 将tempCRC转换为字符串
         LicenseChecker::calculateChecksum(tempCRC2, var20, true); // 将tempCRC2转换为字符串
         nativeHash <= var10 append var20;
         // 和 license中最后的 - 之后的内容进行比较 是否相等
    }
}
由此可见上面的方法,就是 nativeHash的计算方法

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功