이번 주 역 Si3.5 (버전 3.5.66.0)을하고있다, 암호화 알고리즘을 복원하는 것입니다,하지만 그들은 게으른 때문에, RI를 쓰고 싶지 않습니다. 나는 까다로운 방식으로 무제한 사용시의 다양한 시도 할 수 있도록 필 모어, 사실, 더 휴식 SI를 의미하지 않습니다.
활성화시에 순서대로 재판 후, 모든 시작은, 재판에 남아있는 일 수를 표시합니다 :
빨간 부분은 문자열 상수는 IDA 개방이되는 문자열을 검색 할 수 있습니다 "% d 일에 만료되는 평가판 라이센스"는 모양해야한다 :
부호 그 코드의 조각을 찾기 위해 그것을 따르
.text:004A7263 loc_4A7263: ; CODE XREF: sub_4A7077+1D1↑j
...
.text:004A72AC mov eax, totalTrialDays ;si3.5试用版设定的试用天数
.text:004A72B1 sub eax, trialDays ;已经试用的天数
.text:004A72B7 mov [ebp+remainDays], eax
.text:004A72BD push 0FFh ; color
.text:004A72C2 push [ebp+hdc] ; hdc
.text:004A72C5 call ds:SetTextColor ;设置字体颜色
.text:004A72CB mov [ebp+color], eax
.text:004A72D1 cmp [ebp+remainDays], 0
.text:004A72D8 jle short loc_4A72F6
.text:004A72DA push [ebp+remainDays]
.text:004A72E0 push offset trialRemainDays ; "Trial License expires in %d days."
.text:004A72E5 lea eax, [ebp+String]
.text:004A72EB push eax ; char *
.text:004A72EC call _sprint
시 통화 _sprint 형식 문자열, 지시
.text:004A72DA push [ebp+remainDays]
스택에 자리 파라미터처럼 가변 [EBP + remainDays]가 % d. 정확하게 수정 변수 [EBP + remainDays] 근방 문 :
.text:004A72AC mov eax, totalTrialDays ;si3.5试用版设定的试用天数
.text:004A72B1 sub eax, trialDays ;已经试用的天数
.text:004A72B7 mov [ebp+remainDays], eax
참고 totalTrialDays 및 TRIALDAYS는 데이터 세그먼트에서 글로벌 변수는 다음과 같습니다
.data:005E6F8C trialDays dd ? ; DATA XREF: sub_445B93:loc_445BC4↑r
.data:005E6F8C ; sub_448894+185↑w ...
.data:005E6F90 totalTrialDays dd ? ; DATA XREF: sub_445B93+36↑r
나는 다음 실행시하자 OD가 04A72B1에서 빼기 명령을 수정 사용하려고, SI는 이미 쇼를 확장가 실제로 35 일 시험 기간이 있습니다 :
=>
아, 사실,이 단계에 성공적으로 금이 고려된다. 그러나 때마다 당신이 압력을 곧 만료 총 소프트웨어를 제공, 디스플레이뿐만 아니라 일시 총 수십를 엽니 다. 만약 그렇다면, 변경 가능한 일의 남은 수가 큰 그래서. 이것은 적은 피감수 및 감수 TRIALDAYS totalTrialDays을 변경하는 것보다 연산, 아무것도의 기초 지식입니다. IDA는 totalTrialDays / TRIALDAYS 번호를 참조하여 소프트웨어를 비교, 나는 그것을 잘라하기로 결정 그래서 totalTrialDays의 상대적으로 적은 수의 인용 발견했다.
보기 다시 totalTrialDays 참조, 눈에 띄는 명령 "mov 인 totalTrialDays, 23"발견
지침 23 진수 (35)는 그렇지 않아? 그것은 insight3.5 항상 그 집행 유예 소스인가? 음, 100 년 100 년 후, 어쨌든, 나는 코드를 볼 수 없습니다 변경, 큰 즉각적인 변화를 넣습니다.