1.AI Code Translator 编程语言自动转换工具源码分析
2.某团外卖H5版本爬虫开发和JS逆向过程(二)
3.element-plus源码与二次开发:package.json解析
4.JS混淆openlaw反爬破解实践
5.轻量级鸿蒙组件JS虚拟机<3>——解析器
AI Code Translator 编程语言自动转换工具源码分析
近期,关注到开源库 PuerTS 提及“Lua到TS的AI转写”。基于此,我探究了一款基于GPT的代码翻译工具——“AI Code Translator”。此工具能将一种编程语言自动转换为另一种语言。PuerTS提及的FM手机源码“AI转写”可能采用了相似原理。本文将深入分析“AI Code Translator”中“转写”部分的实现。
项目地址:未提供
项目截图:未提供
尝试使用在线工具 aicodeconvert.com/ 将一段TS代码转为Lua。实际体验中,AI转换的Lua代码保留了TS代码的含义、结构和写法,但需要开发者补充一些在目标语言中不存在的类型或函数,例如Lua的class。此外,名称保持与源代码一致,但如果源代码中使用特定库或框架,转换后的代码同样使用该库,但目标语言可能并未提供相应版本,需要开发者自行实现或先用AI转写源库。
分析工具的前端使用next.js编写,核心功能在Index.ts文件中,包含createPrompt和OpenAIStream两个关键方法。createPrompt负责构造AI翻译所需的提示词,OpenAIStream则封装了与OpenAI API的交互。createPrompt方法根据输入语言、输出语言以及代码内容构建提示词,旨在让AI理解翻译任务并生成目标代码。
创建提示词的方法分为三个主要分支,分别针对自然语言输入、资源网源码自然语言输出以及具体编程语言的输入和输出情况。在构建提示词时,采用身份说明、任务描述、举例、具体文本填充和输出格式续写等步骤,旨在引导AI完成代码翻译。
对于大工程的转写,建议采用以下改进策略:分析代码依赖关系,优先转写底层代码;分段处理代码,避免超过AI处理的token长度限制;对AI生成的代码进行人工检查和测试,提升代码质量。这些技巧可帮助开发者更高效地利用AI转写工具。
总结,AI转写工具“AI Code Translator”通过简单的提示词构造实现代码自动转换。虽然适用于小型代码段,但对于大工程的转写还需结合人工辅助,以提高效率和代码质量。此外,若目标是学习和开发网络游戏,特别是手机游戏或游戏行业相关工作,推荐阅读《Unity3D网络游戏实战(第2版)》,本书由作者总结多年经验编写,提供实用的教程和知识,非常适合这一领域的需求。
某团外卖H5版本爬虫开发和JS逆向过程(二)
本篇深入探索美团外卖H5页面UUID的生成算法逆向过程。在前一篇文章中,我们详细介绍了x-for-with和_token的留言源码生成方法。若未阅读前文,建议先了解前篇内容再继续阅读本篇。 UUID的生成模版如图所示,通常我们寻找用户身份标识的ID时,会先检查返回的UUID是否由服务器提供。如果提供,我们可以通过模拟报文从服务器获取合法UUID;若非服务器提供,则可能为本地生成。 在本案例中,经过观察发现UUID并非网络通信传回,因此选择在本地进行查找。简单粗暴法
首先,采用全局搜索“-”来定位UUID的拼接逻辑。搜索关键词时使用双引号是关键技巧之一。搜索结果指向analytics.js文件,或可疑代码位置。随后,通过页面JS断点调试或直接调用JS执行,还原生成算法。 分析JS源码,涉及UA参数、分辨率参数等信息。为了正确伪造传入参数,需确保与包体携带信息一致,特别是手机参数信息。下面提供一个算法还原示例供参考。顺藤摸瓜法
在前文中,我们注意到uuid、源码搜搜_lxsdk_cuid、openh5_uuid、_lxsdk等标识是一致的,这些信息通常在cookie中可找到。因此,通过分析网络请求堆栈,可发现uuid来自cookie的获取。进一步查找cookie设置uuid的部分,即可找到生成算法。 此方法与前篇文章类似,不再一一列出截图。进行逆向分析时,善用两个工具:搜索引擎与代码调试工具,能够事半功倍。 总结以上方法,对于UUID的逆向查找,既可采用简单粗暴的全局搜索法,也可通过顺藤摸瓜法,即从已知一致的标识出发追踪至生成源头。实践时,可结合具体案例中的代码特点与报文分析,灵活运用上述策略。 鼓励大家尝试实践,探索更多可能。希望本文能对您有所帮助。欢迎分享与讨论。element-plus源码与二次开发:package.json解析
element-plus使用pnpm的workspace来搭建monorepo工程,允许在单一码仓库中集中管理大量互相依赖的源码套包,同时确保发布时的独立性。pnpm-workspace.yaml文件在根目录声明内部可引用的包,执行pnpm i后,会在node_modules中创建软连接,无需手动link。
element-plus组件库将vue声明在peerDependencies中,避免在主项目安装组件库时额外安装vue。通过czg包定义规范,执行提交commit命令,确保遵循git规范。使用play子包进行简单的开发调试,引入本地组件库。通过gen命令快速创建新组件,使用模板生成组件基础模板。生成版本号文件命令用于在构建时提供rollup的banner参数,部署前更新版本号命令从环境变量获取TAG_VERSION和GIT_HEAD,写入到三个包的package.json中的version和gitHead字段。
清理dist目录命令使用pnpm run -r --parallel,以并行方式执行所有子包的命令,删除根目录下的dist目录,并执行所有子包的clean命令。构建文档和组件库的关键步骤包括使用rollup执行构建,通过@esbuild-kit/cjs-loader将esm和ts实时转换为CommonJS。生成类型声明文件和代码提示文件,复制源样式文件、编译为css、压缩,并输出到特定目录。启动组件库文档docs项目基于vitepress,构建组件文档,本地测试构建出的生产环境docs,生成多语言文件和CROWDIN_TOKEN。
执行各包的stub命令,使用unbuild打包工具,基于rollup,支持typescript,支持生成commonjs和esmodule和类型声明,无需额外配置。prepare Husky钩子脚本确保自动执行预定义命令,执行pnpm i后,自动执行pnpm stub,编译internal下的三个包入口。
通过上述详细解析,我们可以清晰了解到element-plus源码与二次开发中的核心功能与流程,从构建结构到构建流程,再到二次开发工具的运用,展示了其高效、灵活的特点。
JS混淆openlaw反爬破解实践
爬虫与反爬虫始终存在对抗,反爬手段层出不穷,破解方法也应运而生。本文将介绍如何利用前端JavaScript代码混淆加密作为反爬技术,并实践如何破解这类策略。
OpenLaw 是一个面向法律专业人士的开放性组织,旨在共享法律知识和经验。当我们尝试获取特定causeId下的案件信息时,发现页面访问正常,但输出的却是JavaScript代码。面对这一情况,我们需要进一步分析。
实际上,OpenLaw在请求过程中引入了一个j_token的Cookie,这是通过在首次请求中跳转到混淆JavaScript代码中计算获取的。我们的目标是绕过这一机制,实现数据的提取。
开始破解之旅,利用Chrome的snippet和console工具,我们首先针对混淆JavaScript代码进行逐步分析和剥离。将eval函数替换为console.log,逐层输出代码内容,直至获取到关键信息。这一过程中,我们通过URL编码和解码,以及ASCII码转换,逐步还原原始代码。
经过多层解码,我们发现了获取j_token的关键步骤。通过将代码片段在控制台执行,我们最终揭示了j_token的生成逻辑。值得注意的是,这些步骤需要在控制台中逐步操作,以确保正确解析代码。
在成功获取j_token后,我们可以通过修改请求头或使用代理服务器,携带该token进行后续数据获取。这一过程涉及代码的调整和执行,确保能够绕过反爬机制,成功获取所需信息。
本文仅提供了解决方案的大致步骤和思路,具体的实现代码和结果将在附录中提供。如果您需要获取源代码进行实践,请访问链接:[链接],密码为:a4nb。
轻量级鸿蒙组件JS虚拟机<3>——解析器
揭秘轻量级鸿蒙组件的JS虚拟机解析器:深度解析与功能详解 JerryScript的解析器,犹如魔法般将JavaScript源代码转化为高效运行的字节码,其核心步骤包括递归解析和优化整合。这个过程涉及的关键组件,如同交响乐团的各个乐师,共同演奏出代码的美妙旋律。 递归解析的艺术 解析器采用递归策略,每一步都精心设计,以防止深度过深导致性能瓶颈。它在源代码中游刃有余,将每行代码转化为字节码的基石,但更进一步,它还实现了紧凑型字节码(CBC),以节省存储空间。 核心组件的华丽演出词法分析器Lexer,如同乐谱的解读者,将源代码中的关键字和符号转化为有意义的tokens,为后续解析提供基石。
扫描器Scanner,则如指挥家,解读tokens的多重含义,确保语法的准确性。例如,"for"可能是for-in或常规循环,"\'"可能是正则或除法运算,它通过后续token的引导,为每个词赋予精准的含义。
解析器Parser,则是整个过程的执行者,自上而下预测,从语句起点到可能的终点,逐步构建语义。在for-in语句中,解析器结合for和in来确定其确切含义。
细节之处见真章 解析器的每个函数,如lexer_next_token和lexer_parse_string,都精细地处理着字符的读取和处理。比如,lexer_next_token逐个解读字符,将其转化为token类型,并存储在parser_context_t中。而lexer_parse_string则负责精确解析字符串,确保数据的完整性和准确性。 parser_parse_statements则是解析器中的核心函数,它通过解析堆栈,将语句转化为操作码,并在必要时进行变形,如CBC_PUSH_THIS和CBC_PUSH_PROP_THIS_LITERAL等。这需要深入理解字节码文件和BC值与代码逻辑的对应关系。 文字对象的巧思 在解析过程中,当遇到文字对象,解析器会调用lexer_process_char_literal来判断是否存储。这体现了解析器对内存管理的精巧处理,确保对象的有效利用。 紧凑型字节码:轻量级的效率提升 CBC作为轻量级的优化,通过压缩字节码,为代码运行带来显著的空间节省。在JerryScript 2.3.0版本中,CBC的操作码优化使得代码体积减小约%,展现了技术上的卓越与创新。 总的来说,JerryScript的解析器是一个复杂而高效的工具,它将JavaScript源代码转化为执行效率极高的字节码,每个组件都在各自的领域中发挥着关键作用,共同构建了这个轻量级鸿蒙组件的基石。深入了解这个解析器的工作原理,无疑能让开发者更好地驾驭这个强大的工具。