LLM 을 활용한 분석 자동화 도구 개발
LLM 을 통해 더 강력한 도구를 만들려고 한다.
LLM 을 통한 도구 개발
오픈소스에 생성형 AI 를 활용한 자동화 도구를 만들 수 있다고 한다. 이에 나아가 현재 가장 활발하게 사용하고 있는 툴에 스크립트를 연결하여 LLM 도구를 활용해보고자 한다. 모델을 사용하기 전 API 키를 발급받아 적용해야 하는데 이 페이지에서 해당 내용은 다루지 않는다.
만들고자 하는 내용은 이렇다.
툴에서 제공되는 API 를 통해 디컴파일된 코드를 얻는다. 이는 난독화가 되었을 수 있고 그렇지 않을 수 있다. 이때 해당 코드를 포함하여 커스텀 프롬포트를 메세지 바디에 담아서 LLM 모델에 API Query 를 보낼 것이다.
그리고 처리된 응답 메세지에서 코드 부분을 발췌하여 콘솔 창 또는 윈도우 아니면 기존 코드로부터 변경하여 적용해준다.
아래와 같이 변수명이 날라가고 함수명이 날라가고 로직이 이해하기 어렵게 되었을 때 시도해보겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static final java.lang.String c(java.lang.String s, java.lang.String s1) {
if(!jk0.e.k(s)) {
try {
java.security.MessageDigest messageDigest0 = java.security.MessageDigest.getInstance("SHA-256");
byte[] arr_b = s.getBytes(Qi0.a.b);
kotlin.jvm.internal.m.f(arr_b, "getBytes(...)");
byte[] arr_b1 = messageDigest0.digest(arr_b);
return s1 == null || jk0.e.k(s1) ? EQ.V0.p(arr_b1) : EQ.V0.p(arr_b1) + "." + s1;
}
catch(java.security.GeneralSecurityException unused_ex) {
}
}
return "";
}
스크립트를 구동하여 결과를 얻으면 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Original method name: c
public static final java.lang.String hashStringWithOptionalSuffix(java.lang.String inputString, java.lang.String optionalSuffix) {
// Original variable name: s
if(!StringUtils.isEmpty(inputString)) { // Check if the input string is not empty
try {
// Original variable name: messageDigest0
java.security.MessageDigest sha256Digest = java.security.MessageDigest.getInstance("SHA-256"); // Get SHA-256 MessageDigest instance
// Original variable name: arr_b
byte[] inputBytes = inputString.getBytes(CharsetUtils.DEFAULT_CHARSET); // Convert input string to bytes using default charset
kotlin.jvm.internal.m.f(inputBytes, "getBytes(...)"); // Ensure the conversion to bytes is valid
// Original variable name: arr_b1
byte[] hashedBytes = sha256Digest.digest(inputBytes); // Perform the SHA-256 hash computation
// Original variable name: s1
return optionalSuffix == null || StringUtils.isEmpty(optionalSuffix) ? HashUtils.encodeToBase64(hashedBytes) : HashUtils.encodeToBase64(hashedBytes) + "." + optionalSuffix; // If optionalSuffix is null or empty, return the hash, otherwise return hash with optional suffix
}
catch(java.security.GeneralSecurityException exception) {
// Catch security exception but do nothing
}
}
return ""; // Return empty string if input string is empty
}
해당 스크립트를 좀 더 다듬어 자동화를 시켜보고자 한다.
사용 후
오히려 더 어려워지는 감이 없지 않아 있고 놓치는 부분들이 많이 보인다. 조금 시간이 걸리더라도 수동으로 하는 게 지금은 좀 더 좋아보인다. 특히 클래스 메소드를 참조한 코드를 보거나 매개변수를 유추할 때 꽤 많이 혼란을 주어 어려움이 더 커지는 경향이 있다.
하지만 사용해보면서 이런 도구도 만들 수 있구나 경험도 해보았으니 이 부분으로 만족해보려고 한다. 좀 더 좋은 삶의 질을 향상할 수 있는 방안이 있다면 해당 프로젝트를 확장하거나 다른 프로젝트를 통해 개발을 진행해보려고 한다.
If you find any errors, please let me know by comment or email. Thank you.