Notes:De-anonymizing Programmers via Code Stylometry

Essay Information

De-anonymizing Programmers via Code Stylometry
Aylin Caliskan-Islam, Richard Harang, Andrew Liu, Arvind Narayanan, Clare Voss,
Fabian Yamaguchi, and Rachel Greenstadt.
Usenix Security Symposium, 2015

Source code stylometry

  • Everyone learns coding on an individual basis, as a result code in a
    unique style, which makes de-annoymization possible.

  • Software engineering insights

    • programmer style changes while implementing sophisticated
      functionality
    • differences in coding style of programmers with different skill sets
  • Identify malicious programmers.

  • Scenario 1 : Who wrote this code?
    Alice analyzes a library with Malicious source code.
    Bob has a source code collection with known authors
    Bob will search his collection to find Alice’s adversary

  • Scenario 2 : Who wrote this code?
    Alice got an extension for her programming assignment.
    Bob, the teacher has everyone else’s code.
    Bob wants to see if Alice plagiarized.

这里写图片描述

Machine learning workflow

这里写图片描述

Abstract Syntax Trees (AST)

这里写图片描述

  • Stylemotry can be used in source code to identify the author of a program.
  • Extract layout and lexical features from source code.
    • Abstract syntax trees (AST) in code represent the structure of the program.
    • Preprocess source code to obtain AST.
    • Parse AST to extract coding style features.

Feature Extraction

### Code Stylometry Feature Set (CSFS)

Lexical features (Extract from source code)

这里写图片描述

Layout features (Extract from source code)

这里写图片描述

Syntactic features (Extract from ASTs)

这里写图片描述

Feature Selection

WEKA’s information gain criterion, which evaluates the difference between the entropy of the distribution of classes and the entropy of the conditional distribution of classes given a particular feature:
这里写图片描述
where A is the class corresponding to an author, H is Shannon entropy, and Mi is the ith feature of the dataset.

Intuitively, the information gain can be thought of as measuring the amount of information that the observation of the value of feature i gives about the class label associated with the example.

To reduce the total size and sparsity of the feature vector, we retained only those features that individually had non-zero information gain
这里写图片描述

Random Forest Classification

Method

  • Use random forest as the machine learning classifier
    • avoid over-fitting
    • multi-class classifier by nature
  • K-fold cross validation
  • Validate method on a different dataset

Future work

  • Multiple authorship detection
  • Multiple author identification
  • Anonymizing source code
    • obfuscation is not the answer
  • Stylometry in executable binaries
    • authorship attribution
内容概要:本文为《科技类企业品牌传播白皮书》,系统阐述了新闻媒体发稿、自媒体博主种草与短视频矩阵覆盖三大核心传播策略,并结合“传声港”平台的AI工具与资源整合能力,提出适配科技企业的品牌传播解决方案。文章深入分析科技企业传播的特殊性,包括受众圈层化、技术复杂性与传播通俗性的矛盾、产品生命周期影响及2024-2025年传播新趋势,强调从“技术输出”向“价值引领”的战略升级。针对三种传播方式,分别从适用场景、操作流程、效果评估、成本效益、风险防控等方面提供详尽指南,并通过平台AI能力实现资源智能匹配、内容精准投放与全链路效果追踪,最终构建“信任—种草—曝光”三位一体的传播闭环。; 适合人群:科技类企业品牌与市场负责人、公关传播从业者、数字营销管理者及初创科技公司创始人;具备一定品牌传播基础,关注效果可量化与AI工具赋能的专业人士。; 使用场景及目标:①制定科技产品全生命周期的品牌传播策略;②优化媒体发稿、KOL合作与短视频运营的资源配置与ROI;③借助AI平台实现传播内容的精准触达、效果监测与风险控制;④提升品牌在技术可信度、用户信任与市场影响力方面的综合竞争力。; 阅读建议:建议结合传声港平台的实际工具模块(如AI选媒、达人匹配、数据驾驶舱)进行对照阅读,重点关注各阶段的标准化流程与数据指标基准,将理论策略与平台实操深度融合,推动品牌传播从经验驱动转向数据与工具双驱动。
在 FreeMarker 模板中,出现 `Expression reportDate is undefined` 错误通常意味着模板试图访问一个未传递或未定义的变量 `reportDate`。这种情况可能发生在模板的第 312 行,具体原因和解决方法如下: ### 原因分析 1. **变量未传递** 在渲染模板时,`reportDate` 变量没有被正确传递到模板上下文中。FreeMarker 模板引擎无法找到该变量,因此抛出未定义的错误。 2. **变量名拼写错误** 检查模板中使用的变量名是否与后端代码中传递的变量名完全一致,包括大小写。例如,`reportDate` 和 `reportdate` 会被视为不同的变量。 3. **作用域问题** `reportDate` 可能是在某个局部作用域中定义的,但在模板的其他部分尝试访问它时超出了该作用域。 4. **数据模型未正确初始化** 如果 `reportDate` 是从数据库或其他数据源获取的,确保在渲染模板之前正确初始化了数据模型,并且 `reportDate` 不为 `null` 或 `undefined`。 ### 解决方法 1. **检查变量传递逻辑** 确保在调用 FreeMarker 模板时,`reportDate` 被正确添加到数据模型中。例如,在 Java 代码中使用 `model.put("reportDate", value)` 来传递变量。 2. **使用默认值** 在模板中使用 `reportDate` 时,可以通过 `!` 运算符提供一个默认值,以避免未定义错误。例如: ```ftl ${reportDate!defaultReportDate} ``` 如果 `reportDate` 未定义,则使用 `defaultReportDate` 作为替代值 [^1]。 3. **使用 `??` 运算符进行条件判断** 在访问 `reportDate` 之前,可以使用 `??` 运算符检查变量是否存在。例如: ```ftl <#if reportDate??> ${reportDate} <#else> 默认值或错误提示 </#if> ``` 4. **启用 FreeMarker 的严格模式** 在开发阶段,启用 FreeMarker 的严格模式可以帮助捕获未定义变量的错误。配置方式如下: ```java configuration.setStrict(true); ``` 5. **调试模板上下文** 在模板中输出整个上下文对象,查看 `reportDate` 是否存在于数据模型中。例如: ```ftl ${.data_model} ``` ### 示例代码 以下是一个简单的示例,展示如何在 Java 代码中传递 `reportDate` 变量到 FreeMarker 模板: ```java import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; public class FreeMarkerExample { public static void main(String[] args) { // 创建 FreeMarker 配置实例 Configuration cfg = new Configuration(Configuration.VERSION_2_3_31); cfg.setClassForTemplateLoading(FreeMarkerExample.class, "/templates"); try { // 加载模板 Template template = cfg.getTemplate("example.ftl"); // 创建数据模型 Map<String, Object> dataModel = new HashMap<>(); dataModel.put("reportDate", "2023-10-01"); // 渲染模板 Writer out = new OutputStreamWriter(System.out); template.process(dataModel, out); } catch (IOException | TemplateException e) { e.printStackTrace(); } } } ``` 在模板 `example.ftl` 中,可以安全地访问 `reportDate`: ```ftl <#if reportDate??> 报告日期: ${reportDate} <#else> 报告日期未定义 </#if> ``` ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值