Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - apuromafo CLS

#1101
Ingeniería Inversa / Re: Crackear programa
2 Abril 2011, 21:39 PM
yo tengo uno para macros en excel  :rolleyes:
quizas te pueda ayudar

http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/1201-1300/1264-Quitando%20una%20contrase%C3%83%C2%B1a%20de%20una%20macro%20en%20Excel%20by%20Apuromafo.pdf

ademas en macros siempre hay el codigo de fuente ahi mismo si tienes acceso :S

saludos Apuromafo
#1102
aqui hay un tutorial para re-newbies del moderador Shaddy
http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/801-900/874-Desempaquetando%20un%20UPX%20para%20RE-Newbies%20por%20Shaddy.zip

por lo demas UPX, se desempaca mediante metodo pushad/popad
y si es por compresion usa addler/zlib y otros
por lo demas otras tools que suelen ser utiles en upx es Heaventools Pexplorer, ahi es abrir y guardar y listo, descomprimido

#1104
para mi por la sección PDATA seria armadillo, dejame bajarlo y checkear si no es mentira
info sobre armadillo unpacking en
http://ricardonarvaja.info/WEB/buscador.php

sugiero leas si o si este:
http://ricardonarvaja.info/WEB/CONCURSOS%20VIEJOS/CONCURSOS%202007/CONCURSO%204/Armadillo%204.62%20%2B%20Debug%20Blocker%20%2B%20CopyMem%20II%20%2B%20Import%20Table%20Elimination%20%2B%20Code%20Splicing%20%2B%20Nanomites%20%C3%82%C2%96%20PARA%20PRINCIPIANTES%20%C3%82%C2%96%20USANDO%20TOOLS%20%C3%82%C2%96%20Por%20Solid.rar

http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/1201-1300/1289-1__Armadillo%20v8%20%2Bv7%20by%20Apuromafo.pdf


@update es armadillo  8.2 si es para que dure mas tiempo basta con trial reset y listo, pero si es por desempacar aun falta mucho:


info:
File: mtgstudio.exe
Path: C:\archivos de programa\PalmROOT\MTG Studio 1.8.4

-> Locate compression options.
-> Locating pointer to application matrix.
-> Get dword from Armadillo code.
-> Get dword from Armadillo code.
-> Skipping pdata pre-security.dll portion.
-> Skipping tail portion(s).
-> Extract security.dll.
-> Save security.dll to disk.
-> Locate Armadillo version.

* Scan Results *

Detected version: 8.20

* Compression Option *

Compression level: Best/Slowest

* Protection Options *

CopyMem-II & Debug Blocker
Enable Import Table Elimination
Enable Strategic Code Splicing
Enable Nanomite Processing

Armadillo sections: 5

-> Name: .text1
-> Raw offset: 0x00004000
-> Raw size: 0x000A4000
-> Virtual address: 0x00E00000
-> Virtual size: 0x000B0000
-> Characteristics: 0xE0000020

-> Name: .adata
-> Raw offset: 0x000A8000
-> Raw size: 0x0000D000
-> Virtual address: 0x00EB0000
-> Virtual size: 0x00010000
-> Characteristics: 0xE0000020

-> Name: .data1
-> Raw offset: 0x000B5000
-> Raw size: 0x0001D000
-> Virtual address: 0x00EC0000
-> Virtual size: 0x00020000
-> Characteristics: 0xC0000040

-> Name: .reloc1
-> Raw offset: 0x000D2000
-> Raw size: 0x00009000
-> Virtual address: 0x00EE0000
-> Virtual size: 0x00010000
-> Characteristics: 0x42000040

-> Name: .pdata
-> Raw offset: 0x000DB000
-> Raw size: 0x00835000
-> Virtual address: 0x00EF0000
-> Virtual size: 0x00840000
-> Characteristics: 0xC0000040

Text section encrypted: No

Dword shuffling used: Yes
Number of dwords: 9
Hash resources: Yes
Real size of pdata: 0x00834F70
Compression type: 0x2

Raw options value: 0x21E38A76
Call exe OEP: 0x0161F149
Call dll OEP: 0x0161DA60
Offset to Security.dll: 0x00000012
Security.dll size: 0x00134000
Security.dll base: 0x10000000
CopyMem-II decrypt: 0x100680E0

-> Free file buffer.
-> Free .text buffer.
-> Free pdata buffer.
-> Free security.dll buffer.


el tema no es el desempacar, sino el analizar las nanomites en el 8.2 es un poco diferente a los demas

Citar---------------------------
Unsupported Nanomites Detected
---------------------------
Unsupported version of Nanomites detected.
Continuing to patch your file may cause some problem because of undetected Nanomites.
So i recommend you to use another program to fix Nanomites.
Please send target's name to my email to fix this problem:NeVaDa@unreal-rce.net

Do you want to continue?
---------------------------
Sí   No  
---------------------------
pero si envias el mail dice:
Citar
Delivery to the following recipient failed permanently:

   NeVaDa@unreal-rce.net

Technical details of permanent failure:
DNS Error: Domain name not found

asi que queda el tema de como resolver las nanomites en armadillo 8.x




datos:
oep es delphi:
Citar0146F4C4   55               PUSH EBP
0146F4C5   8BEC             MOV EBP,ESP
0146F4C7   83C4 F0          ADD ESP,-10
0146F4CA   B8 94AF4301      MOV EAX,Copia_de.0143AF94
0146F4CF   E8 D8D239FF      CALL Copia_de.0080C7AC
0146F4D4   E8 2F54FCFF      CALL Copia_de.01434908
0146F4D9   33C0             XOR EAX,EAX
0146F4DB   55               PUSH EBP
0146F4DC   68 16F54601      PUSH Copia_de.0146F516
0146F4E1   64:FF30          PUSH DWORD PTR FS:[EAX]
0146F4E4   64:8920          MOV DWORD PTR FS:[EAX],ESP
0146F4E7   A1 F8324D01      MOV EAX,DWORD PTR DS:[14D32F8]
0146F4EC   8B00             MOV EAX,DWORD PTR DS:[EAX]
0146F4EE   80B8 A4000000 00 CMP BYTE PTR DS:[EAX+A4],0
0146F4F5   75 0C            JNZ SHORT Copia_de.0146F503
0146F4F7   A1 F8324D01      MOV EAX,DWORD PTR DS:[14D32F8]
0146F4FC   8B00             MOV EAX,DWORD PTR DS:[EAX]
0146F4FE   E8 85D352FF      CALL Copia_de.0099C888
0146F503   33C0             XOR EAX,EAX
0146F505   5A               POP EDX
0146F506   59               POP ECX
0146F507   59               POP ECX
0146F508   64:8910          MOV DWORD PTR FS:[EAX],EDX
0146F50B   68 1DF54601      PUSH Copia_de.0146F51D
0146F510   E8 7370FCFF      CALL Copia_de.01436588
0146F515   C3               RETN
0146F516  -E9 057C39FF      JMP Copia_de.00807120
0146F51B  ^EB F3            JMP SHORT Copia_de.0146F510
0146F51D   E8 AE8339FF      CALL Copia_de.008078D0
0146F522   8BC0             MOV EAX,EAX
0146F524   0000             ADD BYTE PTR DS:[EAX],AL
0146F526   0000             ADD BYTE PTR DS:[EAX],AL
0146F528   0000             ADD BYTE PTR DS:[EAX],AL
0146F52A   0000             ADD BYTE PTR DS:[EAX],AL


Citar0080C7AC   53               PUSH EBX
0080C7AD   8BD8             MOV EBX,EAX
0080C7AF   33C0             XOR EAX,EAX
0080C7B1   A3 280A4701      MOV DWORD PTR DS:[1470A28],EAX
0080C7B6   6A 00            PUSH 0
0080C7B8   E8 2BFFFFFF      CALL mtgstudi.0080C6E8                   ; JMP to kernel32.GetModuleHandleW
0080C7BD   A3 387C4D01      MOV DWORD PTR DS:[14D7C38],EAX
0080C7C2   A1 387C4D01      MOV EAX,DWORD PTR DS:[14D7C38]
0080C7C7   A3 340A4701      MOV DWORD PTR DS:[1470A34],EAX
0080C7CC   33C0             XOR EAX,EAX
0080C7CE   A3 380A4701      MOV DWORD PTR DS:[1470A38],EAX
0080C7D3   33C0             XOR EAX,EAX
0080C7D5   A3 3C0A4701      MOV DWORD PTR DS:[1470A3C],EAX
0080C7DA   8D43 08          LEA EAX,DWORD PTR DS:[EBX+8]
0080C7DD   A3 440A4701      MOV DWORD PTR DS:[1470A44],EAX
0080C7E2   E8 B9FFFFFF      CALL mtgstudi.0080C7A0
0080C7E7   BA 300A4701      MOV EDX,mtgstudi.01470A30
0080C7EC   8BC3             MOV EAX,EBX
0080C7EE   E8 39AEFFFF      CALL mtgstudi.0080762C
0080C7F3   5B               POP EBX
0080C7F4   C3               RETN


un script si alguien quiere apoyar con el codesplicies a mano, el nanomite a mano

el script permite desatachar el armadillo 8.x del padre al hijo parchando el crypto lugar, cuando se parchea, ira al segundo lugar (vease que comento cual es el oep y el lugar donde uno llega es el 2do (el call en un delphi como init)

el tema es que falta ahi
1) Codesplicit
2)nanomites
3)import destruction/scramle

aqui el script que automatiza el tema de los 2 procesos  a 1 para desempacar y dumpear, no es facil pues es una de las ultimas 3 versiones de armadillo, la ultima es la 8.4 y la 8.4beta

saludos Apuromafo

Citar/*

Detach Parent from Child+Patch Crypto Process+CopyMemII

*/

//Variable Declarations

var WaitForDebugEvent
var WriteProcessMemory
var DebugActiveProcessStop
var OutputDebugStringA
var OutputDebugStringW
var PEHeaderBase
var ImageBase
var CodeBegin
var DataBegin
var ProcessDebugEvent
var ProcessBuffer
var ChildProcessID
var ChildOEP
var OEPBytes
var OEPOffset1
var OEPOffset2
var OEPOffset3
var CryptoProcess
var Address
var Buffer
var Patch1
var Patch2
var temp1

//Setup

dbh

bphwc                                      // Clear any hardware breakpoints
bpmc                                       // Clear any memory breakpoint
bc                                         // Clear any saved breakpoints
lc                                         // Clear the log window

msg "Set Ollydbg to pass all exceptions, and add custom exceptions C0000005, C000001D, C000001E, C0000096 and E06D7363 \r\n\r\npress OK to continue."

gpa "WaitForDebugEvent", "kernel32.dll"
mov WaitForDebugEvent, $RESULT
gpa "WriteProcessMemory", "kernel32.dll"
mov WriteProcessMemory, $RESULT
gpa "DebugActiveProcessStop", "kernel32.dll"
mov DebugActiveProcessStop, $RESULT
add WriteProcessMemory, 05
gpa "OutputDebugStringA", "kernel32.dll"
mov OutputDebugStringA, $RESULT
gpa "OutputDebugStringW", "kernel32.dll"
mov OutputDebugStringW, $RESULT

//Get Section Bases

gmi eip, MODULEBASE
mov ImageBase, $RESULT
mov PEHeaderBase, ImageBase
add PEHeaderBase, 3C                                     // Offset to PE signature
mov PEHeaderBase, [PEHeaderBase]
add PEHeaderBase, ImageBase

mov CodeBegin, PEHeaderBase
add CodeBegin, 104                                       // Offset to 1st Section Virtual Address
mov CodeBegin, [CodeBegin]
add CodeBegin, ImageBase

mov DataBegin, PEHeaderBase                              // Offset to 2nd Section Virtual Address
add DataBegin, 12C
mov DataBegin, [DataBegin]
add DataBegin, ImageBase

log CodeBegin
log DataBegin

// Begin Unpacking

bp  WriteProcessMemory
erun

bc  WriteProcessMemory
sub WriteProcessMemory, 05
bp  WaitForDebugEvent
erun

// Get Information at WaitForDebugEvent

bc  WaitForDebugEvent
mov ProcessDebugEvent, esp
add ProcessDebugEvent, 04
mov ProcessDebugEvent, [ProcessDebugEvent]
mov OEPOffset1, ProcessDebugEvent
add OEPOffset1, 18
mov OEPOffset2, ProcessDebugEvent
add OEPOffset2, 24
mov OEPOffset3, ProcessDebugEvent
add OEPOffset3, 28
log ProcessDebugEvent
log OEPOffset1
log OEPOffset2
log OEPOffset3

// Get Child Process ID and Child OEP

bp OutputDebugStringA
bp OutputDebugStringW
erun

bc OutputDebugStringA
bc OutputDebugStringW

find eip, #C20400#
mov eip, $RESULT

sti

bp OutputDebugStringA
bp OutputDebugStringW
erun

bc OutputDebugStringA
bc OutputDebugStringW

find eip, #C20400#
mov eip, $RESULT

sti

bp  WriteProcessMemory
erun

bc  WriteProcessMemory
mov ChildProcessID, ProcessDebugEvent
add ChildProcessID, 04
mov ChildProcessID, [ChildProcessID]
mov ChildOEP, [OEPOffset1]

// Get Stack Info

mov Address, esp
add Address, 08
mov Address, [Address]
log Address

mov Buffer, esp
add Buffer, 0C
mov Buffer, [Buffer]
log Buffer

// Patch OEP of Child

mov temp1, ChildOEP
sub temp1, Address
add temp1, Buffer
mov OEPBytes, [temp1]
rev OEPBytes
mov OEPBytes, $RESULT
log "OEP of Child Process was patched to EBFE"
log ChildOEP
log ChildProcessID
mov [temp1], #EBFE#

// Find and patch Crypto Proc

rtr
sti
gmemi eip, MEMORYBASE
mov CryptoProcess, $RESULT
find CryptoProcess, #8B048A50E8????????83C40C#           // "mov eax, dword ptr ds:[edx+ecx*4]" "push eax" "call XXXXXXXX" "add esp,0c"
cmp $RESULT, 0
je Error1
mov CryptoProcess, $RESULT
add CryptoProcess, 04
mov [CryptoProcess], #9090909090#
log CryptoProcess
log "Crypto Process was nopped."

eval "Successfully Patched OEP = {ChildOEP} of Child Process (PID= {ChildProcessID}) from {OEPBytes} to EBFE.\r\n\r\nCheck log for more info. Press OK to continue."
log $RESULT
msg $RESULT

// Patch CopyMemII and WaitForDebugEvent

bp  WaitForDebugEvent
erun

bc  WaitForDebugEvent

mov Patch1, [esp]
sub Patch1, 12
log Patch1
mov [Patch1], #909090909090909090909090909090909090#
add Patch1, 14
eval "jmp {CodeBegin}"
asm Patch1, $RESULT
add Patch1, 05
eval "nop"
asm Patch1, $RESULT

mov Patch2, CodeBegin
eval "add dword [{OEPOffset1}],1000"
asm Patch2, $RESULT
add Patch2, 0A
eval "add dword [{OEPOffset2}],1000"
asm Patch2, $RESULT
add Patch2, 0A
eval "add dword [{OEPOffset3}],1000"
asm Patch2, $RESULT
add Patch2, 0A
eval "cmp dword [{OEPOffset3}],{DataBegin}"
asm Patch2, $RESULT
add Patch2, 0A
eval "jnz {Patch1}"
asm Patch2, $RESULT
add Patch2, 06
eval "push {ChildProcessID}"
asm Patch2, $RESULT
add Patch2, 05
eval "call {DebugActiveProcessStop}"
asm Patch2, $RESULT
add Patch2, 05
eval "nop"
asm Patch2, $RESULT

sub CodeBegin, 1000
mov [OEPOffset1], CodeBegin
mov [OEPOffset2], CodeBegin
mov [OEPOffset3], CodeBegin

//go [esp]

mov eip, [esp]
bp  Patch2
erun

bc Patch2
msg "Script Completed Successfully! More Info in Log. Have fun!"
jmp End

Error1:
msg "Can't find Crypto Process call!"

End:
ret


en el proceso:
---------------------------
MSG ODbgScript
---------------------------
Successfully Patched OEP = 80C7AC of Child Process (PID= E24) from 538BD833 to EBFE.



Check log for more info. Press OK to continue.
---------------------------
Aceptar   Cancelar  
---------------------------
Log data
Address    Message
          CodeBegin: 00801000
          DataBegin: 01450000
77B10000   Module C:\MFO\system32\apphelp.dll
7C802214   Breakpoint at kernel32.7C802214
7C85A610   Breakpoint at kernel32.WaitForDebugEvent
          ProcessDebugEvent: 0013F388
          OEPOffset1: 0013F3A0
          OEPOffset2: 0013F3AC
          OEPOffset3: 0013F3B0
7C810669   New thread with ID 000009DC created
7C80220F   Breakpoint at kernel32.WriteProcessMemory
          Address: 0080C000
          Buffer: 00711410
          OEP of Child Process was patched to EBFE
          ChildOEP: 0080C7AC
          ChildProcessID: 00000E24
          CryptoProcess: 0160AC49
          Crypto Process was nopped.
          $RESULT: Successfully Patched OEP = 80C7AC of Child Process (PID= E24) from 538BD833 to EBFE.

Check log for more info. Press OK to continue.
7C85A610   Breakpoint at kernel32.WaitForDebugEvent
          Patch1: 0160922F
00801038   Breakpoint at mtgstudi.00801038


Patched OEP = 80C7AC of Child Process (PID= E24) from 538BD833 to EBFE.

splicies:
---------------------------
ArmInline
---------------------------
Non-contiguous code generated.
---------------------------
Aceptar  
---------------------------
#1105
ayudando a comprender, yo lo entiendo asi:

peid o rdg no es para desempacar automaticamente, es para verificar si la aplicacion esta comprimida o que con que compilador esta hecho y luego de aquello tomar alguna accion a analizar con el depurador indicado/descomprimir con alguna tecnica o similar

pero viendo que  @tincopasan  tuvo tiempo, felicidades ;)

igual seria bueno charlar que para guiarte, es necesario que leas

te sugiero que veas y leas cuidadosamente
http://ricardonarvaja.info/WEB/INTRODUCCION%20AL%20CRACKING%20CON%20OLLYDBG%20DESDE%20CERO/

en la opcion pdf si tienes poco tiempo y en la version doc, si tienes mas tiempo

para seguir charlando, creo que esto es similar que la duda de otro forero :)
http://foro.elhacker.net/ingenieria_inversa/ayuda_problema_con_reshack-t323083.0.html;msg1596490#msg1596490

en aquel coloque esto:
Cita de: apuromafo en 29 Marzo 2011, 02:03 AM
1)escanear que packer tiene con RDG/peid/exeinfope otros
si no tienes, baja de aqui
http://pid.gamecopyworld.com/
http://www.peid.info/

2)desempacar o inlinear con el depurador favorito
ejemplo ollydbg/ida/windbg
www.ollydbg.de

3) luego editar el recurso si procede.

por ejemplo , yo una vez tuve un exe empacado con execryptor,y despues de quitarlo, tuve que parchar crc, buscar algunas partes importantes y recien edite el recurso..

http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/1301-1400/1309-EC%20quick%203d%20execryptor%20%2Bpainter%20%20%20by%20Apuromafo.rar

ahora el tema es mas complejo aun, pero en mi version me sirvio

editores de recursos:
Reshacker,PExplorer de heaventools, Restorator , y dependiendo del lenguaje que tenga el unpacked, ejemplo vb, podria usarse Vbreformator , saludos Apuromafo


aunque en .net tambien podrian haber mas métodos como este:
http://foro.elhacker.net/ingenieria_inversa/proyecto_traduccion-t320243.0.html


saludos Apuromafo



#1106
genial, esto es bueno para cualquier .net

genial que se pudo hacer

saludos Apuromafo
#1107
Para matar la duda... cuando ya terminaba de hacer los cambios, en la ventana del Compilador hacia click derecho > Copiar a Ejecutable > Todas las Modificaciones, y luego le daba Save. Pero no se guardaba nada en los cambios q hacia en la ventana Hex... En la forma q guardo, hay algo q hago mal?

yo creo que no, por lo mismo aveces cuando no toma en un lugar, se le hace
mov Direccion, byte como bien te comentaba, al estilo inline , o bien debes agregar los permisos con virtualprotect y luego escribir, y devolver el permiso de la sección ;)

si quieres hacerlo mas simple aun, copias los bytes a cambiar en una lista ordenada de cada byte y los agregas en un parchador, el parchador se encargara de hacer el resto

saludos Apuromafo

#1108
lo mas probable es que sea por el script de winmgmts que permite el aceso en el orden correcto

no tengo tiempo, si alguien se anima, verifique primero aquello
saludos Apuromafo
pd:digo script porque muchas veces es como xml+binario / veanlo en notepad/IDA/los otros  archivos msc
#1109
algun dia encontraras con cadenas con variables de wsprint , o variables dependientes de eax, ebx o otras solo te doy la idea y no la pierdas, si no, guarda este texto y guardalo para cuando pases 2 años y verifica denuevo ,
con respecto a las string nota que cuando guardas todos los cambios y si guardaste justo una api, deberas reparar la importacion, porque el cambio sera valido solo en tu maquina

ejemplo
inyeccion de variables de entorno en armadillo, comparaciones en stack en asprotect , comparaciones de hiw en themida etc,



o mejor aun en lenguaje.net, deberas cambiar de herramientas como cff o guiarte con otras ideas.


es bueno que este en c++ porque convencionalmente no usar muchos unicode, que suelen ser
para ejemplo el numero 20  no ascii:00323000   sino asi "0032003000"
en forma hexadecimal

o mas divertido, si tu programa es autocripter, usa xor y va descifrando en bloques, al copiar todo, volvera a descifrar el bloque, si esta mal los registros, crasheara!
por eso siempre es bueno practicar a lo que se tiene
ejemplo un buffer de un archivo, puntero de string, y no generalizar tanto porque al final no funciona y denuevo tener que buscar que esta el error.

tengo guardado algunas historias que justo parcharon y no se dieron cuenta que no corria, y ya tenian hecho decenas de cambios,
yo he hecho eso cuando intento desvirtualizar codigos muy ofuscados, aveces no corren porque esta mal, sobre todo en los "stolen oep"

bueno, no comento mucho para no asustarte, realmente es para que no tengas ningun error, ya se llevan años.

saludos Apuromafo
#1110
@Tena buena imagen


creo que ya esto lo habiamos comentado alguna vez por el foro pero vuelvo a comentar  hay 2 tipos de texto en general , ascii y unicode, se escribe en los bytes y se copia (se guarda) copy all changes & save (GUARDADO Nº1)  (ejemplo los bytes "hexadecimal 00313131313100 ->ascii: 11111 " 

cuando se abre el cambiado(Nº1) , se cambia el puntero, la estructura mas comun a cambiar son los mov XXX,YYYYY
colocando en el original mov XXX, Direccion a Mov xxx,direccion_del_lugarcambiado
o bien algun push XXXXX a Push YYYY

si luego la modificacion son de estilo buffer, escribiendo en stack, esi ebp o otros,
modificaciones a estilo inline, sugieren nopear el lugar, saltar a otra zona y escribir todo lo que se quiera y devolver el flujo mediante comparaciones y esperar el momento justo



pushfd
pushad
opcional:comparaciones_de_valores
{codigo inline}
popad
popfd

debes colocar la string y copiar (guardar) y ya deberia estar listo,siempre y cuando caiga bien en el espacio,
lo mas comun es desviar el flujo  (para ayudar a evitar bugs) y solo parchando con mov byte ptr[lugar],byte_parchar     ejemplo 0075 a 0076
mov word ptr[lugar],word_parchar  ejemplo  003031 a 003132
mov dword ptr[lugar],dword_parchar  ejemplo 00313232 a 00313233


conclusion:
los cambios estan bien, pero debes guardarlos, recordar que el inicio de un string depende del inicio y final en una cierta estructura, los espacios y cambiar un lugar y guardar y seguir copiando, pues las ediciones son referenciales a espacios con permiso de lectura y escritura, si esta comprimido, pues ni modo que primero debes desempacar, pero no creo que sea el caso
pero si fuera el caso que plantea @Amerikano|Cls  deberas usar inlinem pero tambien hay que recordar que tambien en las propiedades de ciertos bOX, de los recursos aceptan un cierto largo  y ahi debe aparte del largo verse las propiedades del control/edit/form etc
si es vb , mejor abrir vbdecompiler y ver si se puede editar.(ahorraras tiempo)

saludos Apuromafo

luego