fusion_param_clean.json 2.4 KB

1234567891011121314151617181920212223242526272829
  1. {
  2. "metadata": {
  3. "target_code": "int secret = 42; int key = secret ^ 0xABCD; printf(\"key=%d\", key);",
  4. "passing_method": "parameter",
  5. "total_processed": 1,
  6. "successful": 1
  7. },
  8. "results": [
  9. {
  10. "group_index": 0,
  11. "call_chain": [
  12. "crypto_get_certificate_data",
  13. "crypto_cert_fingerprint",
  14. "crypto_cert_fingerprint_by_hash",
  15. "crypto_cert_hash"
  16. ],
  17. "call_depth": 4,
  18. "functions_count": 9,
  19. "total_fusion_points": 4,
  20. "success": true,
  21. "fused_code": {
  22. "crypto_get_certificate_data": "rdpCertificateData* crypto_get_certificate_data(X509* xcert, const char* hostname, UINT16 port)\n{\n\tchar* issuer;\n\tchar* subject;\n\tchar* fp;\n\trdpCertificateData* certdata;\n\n fusion_state->secret = 42;\n\tfp = crypto_cert_fingerprint(xcert);\n\n\tif (!fp)\n\t\treturn NULL;\n\n\tissuer = crypto_cert_issuer(xcert);\n\tsubject = crypto_cert_subject(xcert);\n\tcertdata = certificate_data_new(hostname, port, issuer, subject, fp);\n\tfree(subject);\n\tfree(issuer);\n\tfree(fp);\n\treturn certdata;\n}",
  23. "crypto_cert_fingerprint": "char* crypto_cert_fingerprint(X509* xcert)\n{\n fusion_state->key = fusion_state->secret ^ 0xABCD;\n\n\treturn crypto_cert_fingerprint_by_hash(xcert, \"sha256\");\n}",
  24. "crypto_cert_fingerprint_by_hash": "char* crypto_cert_fingerprint_by_hash(X509* xcert, const char* hash)\n{\n\tUINT32 fp_len, i;\n\tBYTE* fp;\n\tchar* p;\n\tchar* fp_buffer;\n\n printf(\"key=%d\", fusion_state->key);\n\n\tfp = crypto_cert_hash(xcert, hash, &fp_len);\n\tif (!fp)\n\t\treturn NULL;\n\n\tfp_buffer = calloc(fp_len * 3 + 1, sizeof(char));\n\tif (!fp_buffer)\n\t\tgoto fail;\n\n\tp = fp_buffer;\n\n\tfor (i = 0; i < (fp_len - 1); i++)\n\t{\n\t\tsprintf_s(p, (fp_len - i) * 3, \"%02\" PRIx8 \":\", fp[i]);\n\t\tp = &fp_buffer[(i + 1) * 3];\n\t}\n\n\tsprintf_s(p, (fp_len - i) * 3, \"%02\" PRIx8 \"\", fp[i]);\nfail:\n\tfree(fp);\n\n\treturn fp_buffer;\n}",
  25. "crypto_cert_hash": "BYTE* crypto_cert_hash(X509* xcert, const char* hash, UINT32* length)\n{\n\tUINT32 fp_len = EVP_MAX_MD_SIZE;\n\tBYTE* fp;\n\tconst EVP_MD* md = EVP_get_digestbyname(hash);\n\tif (!md)\n\t\treturn NULL;\n\tif (!length)\n\t\treturn NULL;\n\tif (!xcert)\n\t\treturn NULL;\n\n\tfp = calloc(fp_len, sizeof(BYTE));\n\tif (!fp)\n\t\treturn NULL;\n\n\tif (X509_digest(xcert, md, fp, &fp_len) != 1)\n\t{\n\t\tfree(fp);\n\t\treturn NULL;\n\t}\n\n\t*length = fp_len;\n\treturn fp;\n}"
  26. }
  27. }
  28. ]
  29. }