satan53x / SExtractor

从GalGame脚本提取和导入文本
GNU General Public License v3.0
226 stars 15 forks source link

JIS替换功能 #58

Closed allrobot closed 7 months ago

allrobot commented 7 months ago

JIS替换新增:https://github.com/marcussacana/StringReloads

相关说明:https://www.ai2moe.org/topic/20445-jis%E6%9B%BF%E6%8D%A2%E7%9A%84%E5%8F%A6%E4%B8%80%E7%A7%8D%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/

貌似比UniversalInjectorFramework更好用些

satan53x commented 7 months ago

这个工具和JIS替换没有必然联系,UIF的JIS替换是character_substitution模块。 教程里的这个工具只是用来帮你指定字体,也就是说是需要使用JIS替换字体时,才使用它的Font Modifier配置,对应的只是UIF的font_manager模块。(不过功能上有些不同,这个CreateFont可以修改更多参数,比如字符宽度) 虽然这个工具也可以进行字符串注入,但是看说明好像是需要针对每一个exe找到对应的指令地址,并不通用,不是hook系统函数。

satan53x commented 7 months ago

UIF的dll相比其他工具,优势就是可以看到调试信息。 所以即使是需要用JIS隧道功能,我也会选择UIF的隧道模块而不是VNTProxy。

allrobot commented 7 months ago

只要了解exe调用的是哪个字体函数,然后在ini启用该字体函数为True

image

工具作者也提使用dll和配置文件,无需每一个exe找到对应的指令地址

https://github.com/marcussacana/StringReloads/raw/3a4610ec1c65fa0f075ef0dbebb3a1f3c91507b0/README.MD?plain=1#L85-L87

https://github.com/marcussacana/StringReloads/raw/3a4610ec1c65fa0f075ef0dbebb3a1f3c91507b0/README.MD?plain=1#L106-L109

偷懒的用户在配置中启用4个字体函数就好了,相关说明的用户使用过程也提到这点

satan53x commented 7 months ago

你说的这个是类似font_manager的功能,我是说JIS替换,指定字体和JIS替换没有关系啊。 JIS替换字体是后来生成的,JIS替换是character_substitution模块。 你说的这个工具配置里哪有JIS替换需要的字典?

satan53x commented 7 months ago

字体是把dll本来的JIS替换hook功能给替代了。 所以字体直接安装都可以用呢,如果用了字体,dll就和JIS替换无关了。 UIF本来是不需要字体就能进行JIS替换的,只有有些游戏hook不到。

satan53x commented 7 months ago
  "character_substitution": {
    "enable": true,
    "source_characters": "習蕩時凜鶇細間槇許邁進歩遙堯覚給這麼噴現観強勁開鹹還見樣場興們熱呑陰記髪靜奮実課過愛鞁務囲繞応齒備亜誡聖請賜鉤懐鯔嗚鰮僅種鼇讓義説類級渇鑚雖頂緊繃肭龜満醤麭軟膚弾鶺媽読絵終結東鶯黨質問較長軽挙錯誕淨邊謝嘗専為慮養減難対責鄰伝鬧話帯煩響護適厳評書貝瓏鳧変臓諧潤動順暢撃経綿純霧縮鼕圖館論別狢頭歓黴瑤設該験龍際臉処単親艶毎貴歴鏡驛濶脳鰤鰡櫓紅馬連頚継続認褻項渋堅車閲嫻張勢簡亀討厭優費試纏聞戯関齡紀賛偉納門夾題驚腸皺剛鷁執識線獲謎確異麗陽選調査騙頻凍証滅軍隊羅諾歳業監視擁賞鼡電運購買汚載",
    "target_characters": "习荡时你嘻细间吧许迈进步呢啊觉给这么喷现观强劲开嘿还见样场兴们热吞阴记发噗奋实课过爱舔务围绕应份备亚诫圣请赐够怀咦呜喔仅种厉让义说类级渴钻虽顶紧绷蘑吗满酱碰软肤弹嗯妈读绘终结东哎奶质问较长轻举错诞净边谢尝专为虑养减难对责另传闹话带烦响护适严评书贝珑谎变脏谐润动顺畅击经绵纯雾缩啦图馆论别诶头欢霉她设该验咙际脸处单亲艳每贵历镜烘肮脑哟咕噜红马连颈继续认亵项涩坚车阅娴张势简龟讨厌优费试缠闻戏关办纪赞伟纳门夹题惊肠皱刚裤执识线获谜确异丽阳选调查骗频冻证灭军队罗诺岁业监视拥赏您电运购买污载",
    "remain": [
      "�"
    ]
  },

这是你之前的uif_config配置,这个才是JIS替换需要的字典。

Cosetto commented 7 months ago

Aside from that, you can use Universal to patch the exe:

{
  "memory_patcher": {
    "enable": true,
    "patches": {
      "myTargetModule.dll+0016BDB4h": "54 6F 61 6E 20 6D 61 6E 20 68 69 6E 68 20 28 4F 29 00",
      "myTargetModule.dll+00172CB4h": "43 68 75 79 82 BA 6E 20 74 82 BC 6E 68 20 63 75 82 B1 69 0A 63 82 C1 6E 67 20 74 72 82 B5 6E 20 54 72 82 9F 69 20 83 83 82 A5 74 2E 00"
    }
  }
}

image

allrobot commented 7 months ago

Aside from that, you can use Universal to patch the exe:除此之外,您可以使用 Universal 来修补 exe:

{
  "memory_patcher": {
    "enable": true,
    "patches": {
      "myTargetModule.dll+0016BDB4h": "54 6F 61 6E 20 6D 61 6E 20 68 69 6E 68 20 28 4F 29 00",
      "myTargetModule.dll+00172CB4h": "43 68 75 79 82 BA 6E 20 74 82 BC 6E 68 20 63 75 82 B1 69 0A 63 82 C1 6E 67 20 74 72 82 B5 6E 20 54 72 82 9F 69 20 83 83 82 A5 74 2E 00"
    }
  }
}

What is the purpose of doing this? I don't have a deep understanding of offset addresses. Is the purpose of this hexadecimal string to ensure that the DLL correctly captures the font of game.exe and loads the character_substitution module correctly? I'm using Windows 10 here, and when I tried adding this, some errors occurred.

{
"memory_patcher": {
"enable": true,
"patches": {
"winmm.dll+0016BDB4h": "54 6F 61 6E 20 6D 61 6E 20 68 69 6E 68 20 28 4F 29 00",
"winmm.dll+00172CB4h": "43 68 75 79 82 BA 6E 20 74 82 BC 6E 68 20 63 75 82 B1 69 0A 63 82 C1 6E 67 20 74 72 82 B5 6E 20 54 72 82 9F 69 20 83 83 82 A5 74 2E 00"
}
}
}

Stopping2.1DA7F797ADAFE15.crash.dmp

chrome_YetkMCCwwk

Cosetto commented 7 months ago

You don't need to worry about it. It only uses to patch strings inside the exe, or hex bytes.