{"id":"https://openalex.org/W6968166352","doi":"https://doi.org/10.5281/zenodo.15511002","title":"JsDeObsBench: Measuring and Benchmarking LLMs for JavaScript Deobfuscation","display_name":"JsDeObsBench: Measuring and Benchmarking LLMs for JavaScript Deobfuscation","publication_year":2025,"publication_date":"2025-05-25","ids":{"openalex":"https://openalex.org/W6968166352","doi":"https://doi.org/10.5281/zenodo.15511002"},"language":"en","primary_location":{"id":"doi:10.5281/zenodo.15511002","is_oa":true,"landing_page_url":"https://doi.org/10.5281/zenodo.15511002","pdf_url":null,"source":{"id":"https://openalex.org/S4306400562","display_name":"Zenodo (CERN European Organization for Nuclear Research)","issn_l":null,"issn":null,"is_oa":true,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I67311998","host_organization_name":"European Organization for Nuclear Research","host_organization_lineage":["https://openalex.org/I67311998"],"host_organization_lineage_names":[],"type":"repository"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":null,"is_accepted":false,"is_published":false,"raw_source_name":null,"raw_type":"article"},"type":"other","indexed_in":["datacite"],"open_access":{"is_oa":true,"oa_status":"green","oa_url":"https://doi.org/10.5281/zenodo.15511002","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":null,"display_name":"Chen, Guoqiang","orcid":"https://orcid.org/0000-0003-0651-6617"},"institutions":[],"countries":[],"is_corresponding":true,"raw_author_name":"Chen, Guoqiang","raw_affiliation_strings":[],"affiliations":[]},{"author_position":"middle","author":{"id":null,"display_name":"Xin, Jin","orcid":"https://orcid.org/0000-0001-6525-2821"},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"Xin, Jin","raw_affiliation_strings":[],"affiliations":[]},{"author_position":"last","author":{"id":null,"display_name":"Lin, Zhiqiang","orcid":"https://orcid.org/0000-0001-6527-5994"},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"Lin, Zhiqiang","raw_affiliation_strings":[],"affiliations":[]}],"institutions":[],"countries_distinct_count":0,"institutions_distinct_count":3,"corresponding_author_ids":[],"corresponding_institution_ids":[],"apc_list":null,"apc_paid":null,"fwci":null,"has_fulltext":false,"cited_by_count":0,"citation_normalized_percentile":null,"cited_by_percentile_year":null,"biblio":{"volume":null,"issue":null,"first_page":null,"last_page":null},"is_retracted":false,"is_paratext":false,"is_xpac":true,"primary_topic":null,"topics":[],"keywords":[{"id":"https://openalex.org/keywords/benchmarking","display_name":"Benchmarking","score":0.777400016784668},{"id":"https://openalex.org/keywords/javascript","display_name":"JavaScript","score":0.7577999830245972},{"id":"https://openalex.org/keywords/benchmark","display_name":"Benchmark (surveying)","score":0.5916000008583069},{"id":"https://openalex.org/keywords/json","display_name":"JSON","score":0.5706999897956848},{"id":"https://openalex.org/keywords/context","display_name":"Context (archaeology)","score":0.48190000653266907},{"id":"https://openalex.org/keywords/python","display_name":"Python (programming language)","score":0.460999995470047},{"id":"https://openalex.org/keywords/byte","display_name":"Byte","score":0.42899999022483826}],"concepts":[{"id":"https://openalex.org/C86251818","wikidata":"https://www.wikidata.org/wiki/Q816754","display_name":"Benchmarking","level":2,"score":0.777400016784668},{"id":"https://openalex.org/C544833334","wikidata":"https://www.wikidata.org/wiki/Q2005","display_name":"JavaScript","level":2,"score":0.7577999830245972},{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.7515000104904175},{"id":"https://openalex.org/C185798385","wikidata":"https://www.wikidata.org/wiki/Q1161707","display_name":"Benchmark (surveying)","level":2,"score":0.5916000008583069},{"id":"https://openalex.org/C2780416260","wikidata":"https://www.wikidata.org/wiki/Q2063","display_name":"JSON","level":2,"score":0.5706999897956848},{"id":"https://openalex.org/C111919701","wikidata":"https://www.wikidata.org/wiki/Q9135","display_name":"Operating system","level":1,"score":0.5325999855995178},{"id":"https://openalex.org/C2779343474","wikidata":"https://www.wikidata.org/wiki/Q3109175","display_name":"Context (archaeology)","level":2,"score":0.48190000653266907},{"id":"https://openalex.org/C519991488","wikidata":"https://www.wikidata.org/wiki/Q28865","display_name":"Python (programming language)","level":2,"score":0.460999995470047},{"id":"https://openalex.org/C77088390","wikidata":"https://www.wikidata.org/wiki/Q8513","display_name":"Database","level":1,"score":0.46000000834465027},{"id":"https://openalex.org/C43364308","wikidata":"https://www.wikidata.org/wiki/Q8799","display_name":"Byte","level":2,"score":0.42899999022483826},{"id":"https://openalex.org/C2777683733","wikidata":"https://www.wikidata.org/wiki/Q201456","display_name":"Directory","level":2,"score":0.4237000048160553},{"id":"https://openalex.org/C136764020","wikidata":"https://www.wikidata.org/wiki/Q466","display_name":"World Wide Web","level":1,"score":0.4147999882698059},{"id":"https://openalex.org/C115903868","wikidata":"https://www.wikidata.org/wiki/Q80993","display_name":"Software engineering","level":1,"score":0.4075999855995178},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.3580999970436096},{"id":"https://openalex.org/C12725497","wikidata":"https://www.wikidata.org/wiki/Q810247","display_name":"Baseline (sea)","level":2,"score":0.3458000123500824},{"id":"https://openalex.org/C63000827","wikidata":"https://www.wikidata.org/wiki/Q3080428","display_name":"Software portability","level":2,"score":0.3156999945640564},{"id":"https://openalex.org/C40305131","wikidata":"https://www.wikidata.org/wiki/Q2616305","display_name":"Obfuscation","level":2,"score":0.31459999084472656},{"id":"https://openalex.org/C2778383056","wikidata":"https://www.wikidata.org/wiki/Q873636","display_name":"Namespace","level":2,"score":0.29649999737739563},{"id":"https://openalex.org/C120524526","wikidata":"https://www.wikidata.org/wiki/Q1709148","display_name":"Reboot","level":2,"score":0.27070000767707825},{"id":"https://openalex.org/C118643609","wikidata":"https://www.wikidata.org/wiki/Q189210","display_name":"Web application","level":2,"score":0.2669999897480011},{"id":"https://openalex.org/C177264268","wikidata":"https://www.wikidata.org/wiki/Q1514741","display_name":"Set (abstract data type)","level":2,"score":0.266400009393692},{"id":"https://openalex.org/C38652104","wikidata":"https://www.wikidata.org/wiki/Q3510521","display_name":"Computer security","level":1,"score":0.26330000162124634}],"mesh":[],"locations_count":1,"locations":[{"id":"doi:10.5281/zenodo.15511002","is_oa":true,"landing_page_url":"https://doi.org/10.5281/zenodo.15511002","pdf_url":null,"source":{"id":"https://openalex.org/S4306400562","display_name":"Zenodo (CERN European Organization for Nuclear Research)","issn_l":null,"issn":null,"is_oa":true,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I67311998","host_organization_name":"European Organization for Nuclear Research","host_organization_lineage":["https://openalex.org/I67311998"],"host_organization_lineage_names":[],"type":"repository"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":null,"is_accepted":false,"is_published":null,"raw_source_name":null,"raw_type":"article"}],"best_oa_location":{"id":"doi:10.5281/zenodo.15511002","is_oa":true,"landing_page_url":"https://doi.org/10.5281/zenodo.15511002","pdf_url":null,"source":{"id":"https://openalex.org/S4306400562","display_name":"Zenodo (CERN European Organization for Nuclear Research)","issn_l":null,"issn":null,"is_oa":true,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I67311998","host_organization_name":"European Organization for Nuclear Research","host_organization_lineage":["https://openalex.org/I67311998"],"host_organization_lineage_names":[],"type":"repository"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":null,"is_accepted":false,"is_published":false,"raw_source_name":null,"raw_type":"article"},"sustainable_development_goals":[],"awards":[],"funders":[],"has_content":{"pdf":false,"grobid_xml":false},"content_urls":null,"referenced_works_count":0,"referenced_works":[],"related_works":[],"abstract_inverted_index":{"About":[0],"JsDeObsBench":[1],"is":[2,122,159,193,207,231,355,607,669],"a":[3,46,53,249,343,476,491,498,507,634,706],"dedicated":[4],"benchmark":[5,57],"designed":[6],"to":[7,56,129,147,321,325,341,356,377,434,446,449,466,495,510,609,628,691],"rigorously":[8],"evaluate":[9],"the":[10,15,23,27,36,43,60,104,116,145,211,260,275,288,292,296,307,310,322,358,374,426,435,456,486,512,516,531,556,562,568,584,587,594,601,611,614,639,662,693,697,701,720,728],"effectiveness":[11],"of":[12,17,38,71,136,149,162,294,443,613,641,730],"LLMs":[13,40],"in":[14,124,181,195,209,232,254,291,304,314,367,465,583,593,638,700,727],"context":[16],"JS":[18,282,350,673],"deobfuscation.":[19,67],"We":[20,50,272,338,527,565,717],"here":[21,566],"release":[22,661],"utils":[24],"for":[25,247,278,349,424,535,572,644,672,712],"building":[26,279],"test":[28,261],"dataset":[29,245,262],"and":[30,41,58,63,95,100,156,179,268,417,586,686],"conducting":[31,536],"evaluation,":[32,126],"which":[33,184,361,724],"also":[34,273,528],"facilates":[35],"evaluation":[37,563,605],"new":[39,635,651],"summarize":[42],"results":[44,414,517,558,570,598,616,664],"into":[45,301,441,521,708],"leaderboard":[47,710],"format.":[48,526],"Leaderboard":[49,629],"have":[51,259,432,447,529],"created":[52],"leaderboard:":[54],"https://jsdeobf.github.io/":[55],"show":[59],"state-of-the-art":[61],"models":[62],"tools":[64],"on":[65,381,458,539],"JavaScript":[66],"Environment":[68],"Dependence":[69],"First":[70,135],"all,":[72,137],"set":[73,287],"PYTHONPATH:":[74],"export":[75],"PYTHONPATH=\"${PYTHONPATH}:/path/to/this-project\"":[76],"Python":[77],"Packages":[78],"To":[79,97,111,489],"install":[80,85,98,112,130,138,200,238],"them,":[81],"run":[82,378,440,561,688],"command:":[83,470],"pip":[84],"-r":[86],"requirements.txt":[87],"Tool":[88],"Dependencies":[89],"nodejs":[90,94,99],"npm":[91,96,141,199,237],"docker":[92,110],"escomplex":[93,120,121,178],"npm,":[101],"please":[102,114],"follow":[103,115],"official":[105],"installation":[106],"instructions":[107],"from:":[108,118],"https://nodejs.org/en/download":[109],"docker,":[113],"instruction":[117],"https://docs.docker.com/engine/install/":[119],"used":[123,194,208,313,608],"our":[125,709],"following":[127,323,375,721],"this":[128],"it:":[131,549,625],"In":[132,217,335,552,630],"directory":[133,218,336,596],"evaluators/escomplex:":[134],"dependencies":[139],"with":[140,264,284,346,523,597],"install.":[142],"Then,":[143],"link":[144],"tool":[146],"one":[148],"your":[150,182,233,480,545,621],"$PATH":[151],"directory,":[152,256],"such":[153],"as":[154],"~/.local/bin/":[155],"/usr/bin/.":[157],"Here":[158],"an":[160],"example":[161,698],"~/.local/bin/:":[163],"ln":[164,168,223],"-s":[165,169,224],"<current_path>/evaluators/escomplex/src/cli.js":[166],"~/.local/bin/escomplex":[167],"<current_path>/evaluators/escomplex/src/halstead.js":[170],"~/.local/bin/halstead":[171],"Make":[172,429],"sure":[173,229,430,445],"that":[174],"you":[175,257,318,353,371,431,439,453,462,474],"can":[176,319,372,454,505],"use":[177,339,373,479,567],"halstead":[180],"shell,":[183],"output":[185],"JSON":[186,302],"string":[187],"by":[188],"default.":[189],"Obfuscator":[190],"(Optional)":[191,205],"This":[192,206],"generating":[196],"obfuscated":[197,263,281],"dataset.":[198,428,514],"--global":[201,239],"javascript-obfuscator":[202],"Baseline":[203],"Deobfuscators":[204],"evaluating":[210],"baseline":[212],"tools.":[213],"Install":[214,235],"javascript-deobfuscator":[215],"(JS-deobfuscator):":[216],"deobfuscators:":[219,337],"git":[220],"clone":[221],"https://github.com/ben-sb/javascript-deobfuscator.git":[222],"<current_path>/deobfuscators/javascript-deobfuscator/dist/run.js":[225],"~/.local/bin/js-deobfuscator":[226,230],"also,":[227],"make":[228],"PATH.":[234],"Synchrony:":[236],"deobfuscator":[240],"Prepare":[241],"Obfuscated":[242],"Dataset":[243],"The":[244,408,578],"needed":[246],"benchmarking":[248],"LLM":[250],"had":[251],"been":[252],"stored":[253,300,592],"build_dataset":[255],"will":[258,410,518,580,590],"7":[265,678],"individual":[266],"transformations":[267,312],"1":[269,401],"combined":[270],"transformation.":[271],"provide":[274],"script":[276,409,534,606],"(obfuscators/obfuscate_codenet.py)":[277],"more":[280,363],"program":[283],"javascript-obfuscator.":[285],"Please":[286,543,704],"obfuscation":[289,541],"config":[290],"top":[293,640],"script,":[295],"supported":[297],"configs":[298],"are":[299,463],"file":[303,415,571,589,695,699],"obfuscators/javascript-obfuscator-configs/*.json.":[305],"And":[306,515],"details.csv":[308],"details":[309],"particular":[311],"each":[315],"config.":[316],"Now,":[317],"refer":[320],"command":[324],"execute":[326],"obfuscation:":[327],"cd":[328],"obfuscators":[329],"&&":[330],"python":[331,391,574,689],"obfuscate_codenet.py":[332],"Deobfuscation":[333],"Evaluation":[334,551],"query_vllm.py":[340,392],"call":[342],"remote":[344],"model":[345,436,636,652,671,680],"openai-style":[347],"API":[348],"deobfuscation,":[351],"all":[352,537,540,618],"need":[354,475],"configure":[357],"right":[359],"parameters,":[360],"has":[362],"detailed":[364],"explains":[365],"written":[366],"query_vllm.py.":[368],"For":[369],"instance,":[370],"cmd":[376],"deobfuscation":[379,533,557,615,663,674],"task":[380],"name-obfuscation:":[382],"API_KEY=\"EMPTY\"":[383],"\\":[384,386,388,390,393,396,399,402,405],"API_URL=\"http://localhost:8000/v1\"":[385],"MODEL=\"Mistral-7B-Instruct-v0.3\"":[387],"TOKENIZER_PATH=\"mistralai/Mistral-7B-Instruct-v0.3\"":[389],"--input_path":[394],"../build_dataset/codenet_dataset_name-obfuscation/Project_CodeNet_selected.jsonl":[395],"--output_path":[397],"../results/codenet_javascript-obfuscator_name-obfuscation/":[398],"--max_retry":[400],"--prompt":[403],"oneshot":[404],"--example":[406],"name-obfuscation":[407],"automatically":[411],"load":[412],"existed":[413],"Mistral-7B-Instruct-v0.3.oneshot.jsonl,":[416],"perform":[418],"unfished":[419],"part.":[420],"Add":[421,633],"--overwrite":[422],"parameters":[423,546,622],"re-deobfuscate":[425],"whole":[427,513],"access":[433,448,457,481,500],"tokenizer.":[437],"If":[438,473],"error":[442],"\"Make":[444],"it":[450,504],"at":[451],"https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3.\",":[452],"require":[455],"huggingface.":[459],"Also,":[460],"ensure":[461],"logged":[464],"huggingface":[467,477],"CLI":[468],"via":[469,485],"huggingface-cli":[471],"login":[472],"token,":[478],"token":[482,492],"or":[483],"authenticate":[484],"browser":[487],"prompt.":[488],"generate":[490,692],"manually:":[493],"Go":[494],"https://huggingface.co/settings/tokens":[496],"Create":[497],"read":[499],"token.":[501],"Heads":[502],"up,":[503],"take":[506],"few":[508],"hours":[509],"deobfuscate":[511],"be":[519,581,591],"saved":[520],"output_path":[522],"<model-name>.<shot>.jsonl":[524],"name":[525],"provided":[530],"batch":[532],"experiments":[538],"configs.":[542],"specify":[544,620],"before":[547,623],"running":[548,624],"./run_deobf.sh":[550,626],"main":[553,631,642],"directory:":[554,632],"Specify":[555],"path,":[559],"then":[560],"script.":[564],"pre-produced":[569],"demonstration:":[573],"eval.py":[575],"--results":[576],"./results/codenet_javascript-obfuscator_name-obfuscation/Mistral-7B-Instruct-v0.3.oneshot.jsonl":[577],"scores":[579,612],"printed":[582],"console,":[585],"metrics":[588],"same":[595],"file,":[599],"adding":[600],"suffix":[602],"\".metric\".":[603],"Batch":[604],"calculate":[610],"against":[617],"configs,":[619],"Release":[627],"card":[637],"function,":[643],"example:":[645],"models_config":[646],"=":[647],"[":[648],"{":[649],"#":[650,659,668,679],"\"name\":":[653],"\"Mistral-7B-Instruct-v0.3\",":[654],"\"link\":":[655],"\"https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3\",":[656],"\"open-data\":":[657],"\"True\",":[658],"if":[660],"file?":[665],"\"is-expert\":":[666],"False,":[667],"expert":[670],"\"prompt\":":[675],"\"oneshot\",":[676],"\"size\":":[677],"size":[681],"(B)":[682],"},":[683],"...":[684],"]":[685],"then,":[687],"read_scores_for_leaderboard.py":[690],"leaderboard.json":[694],"(see":[696],"project":[702],"directory).":[703],"submit":[705],"PR":[707],"repository":[711],"merging":[713],"scores:":[714],"jsdeobf.github.io.":[715],"Acknowledgements":[716],"gratefully":[718],"acknowledge":[719],"open-source":[722],"projects,":[723],"were":[725],"instrumental":[726],"development":[729],"JsDeObsBench:":[731],"https://github.com/javascript-obfuscator/javascript-obfuscator":[732],"https://github.com/escomplex/escomplex":[733],"https://github.com/ben-sb/obfuscator-io-deobfuscator":[734],"https://github.com/ben-sb/javascript-deobfuscator":[735],"https://github.com/relative/synchrony":[736],"https://github.com/vllm-project/vllm":[737],"https://github.com/evalplus/evalplus":[738],"https://github.com/IBM/Project_CodeNet":[739]},"counts_by_year":[],"updated_date":"2025-11-06T06:51:31.235846","created_date":"2025-10-10T00:00:00"}
