【问题标题】:How does Deobfuscation with GWT-Log works in Production with Style Obfuscated?使用 GWT-Log 进行反混淆如何在样式混淆的生产环境中工作?
【发布时间】:2014-03-21 13:50:19
【问题描述】:

我正在使用 GWT 2.6 和 GWT-log 3.3.0。 我尝试使用gwt-log 获取远程日志消息。我试过这个:

Log.fatal("This is what an exception might look like", new RuntimeException("2 + 2 = 5"));

这是我的 gwt.xml:

    <module rename-to='testgwt'>

<inherits name="com.google.gwt.logging.Logging" />
<set-property name="gwt.logging.logLevel" value="INFO" />
<set-property name="gwt.logging.enabled" value="TRUE" />
<set-property name="gwt.logging.popupHandler" value="DISABLED" />
<set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />  


<inherits name="com.allen_sauer.gwt.log.gwt-log-DEBUG" />
<inherits name="com.allen_sauer.gwt.log.gwt-log-RemoteLogger" />

<set-property name="log_ConsoleLogger" value="ENABLED" />
<set-property name="log_DivLogger" value="ENABLED" />
<set-property name="log_FirebugLogger" value="ENABLED" />
<set-property name="log_GWTLogger" value="ENABLED" />
<set-property name="log_SystemLogger" value="ENABLED" />

<set-property name="compiler.emulatedStack" value="true" />
<set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true"/>
<set-configuration-property name="compiler.emulatedStack.recordFileNames" value="true"/>

我的入口点类:

public void onModuleLoad() {

    Log.setUncaughtExceptionHandler();

    Scheduler.get().scheduleDeferred(new ScheduledCommand() {
          @Override
          public void execute() {
            onModuleLoad2();
          }
        });

}

public void onModuleLoad2() {

   Log.fatal("This is what an exception might look like", new RuntimeException("2 + 2 = 5"));
}

我可以看到在 WEB-INF/deploy/web/symbolMaps/ 中有很多文件,每个文件大小为 4.3MB。所以我猜symbolMaps生成成功了。

我的远程 servlet 配置是:

<servlet>
    <servlet-name>gwt-log-remote-logger-servlet</servlet-name>
    <servlet-class>com.allen_sauer.gwt.log.server.RemoteLoggerServiceImpl</servlet-class>
    <init-param>
        <param-name>symbolMaps</param-name>
        <param-value>WEB-INF/deploy/testgwt/symbolMaps/</param-value>
    </init-param>

</servlet>
<servlet-mapping>
    <servlet-name>gwt-log-remote-logger-servlet</servlet-name>
    <url-pattern>/testgwt/gwt-log</url-pattern>
</servlet-mapping>

我使用混淆的样式进行编译。在我的 WEB-INF/lib 文件夹中,我有 gwt-log.3.3.jar 文件。

在客户端我得到

(-:-) 2014-02-20 23:09:54,529 [FATAL] This is what an exception might look like
java.lang.RuntimeException: 2 + 2 = 5
    at Unknown.ui(StackTraceCreator.java:180)
    at Unknown.Zf(StackTraceCreator.java:518)
    at Unknown.Yf(Throwable.java:56)
    at Unknown.kh(Exception.java:29)
    at Unknown.mh(RuntimeException.java:29)
    at Unknown.PW(Testgwt.java:66)
    at Unknown.TW(Testgwt.java:52)
    at Unknown.ki(SchedulerImpl.java:180)
    at Unknown.bi(SchedulerImpl.java:345)
    at Unknown.oi(SchedulerImpl.java:78)
    at Unknown.ii(SchedulerImpl.java:138)
    at Unknown.Kh(Impl.java:290)
    at Unknown.Oh(Impl.java:347)
    at Unknown.anonymous(Impl.java:93)
    at Unknown.anonymous(UnloadSupport.java:42)

在服务器端我得到:

SEVERE: This is what an exception might look like
java.lang.RuntimeException: 2 + 2 = 5
    at Unknown.ui(StackTraceCreator.java:180)
    at Unknown.Zf(StackTraceCreator.java:518)
    at Unknown.Yf(Throwable.java:56)
    at Unknown.kh(Exception.java:29)
    at Unknown.mh(RuntimeException.java:29)
    at Unknown.PW(Testgwt.java:66)
    at Unknown.TW(Testgwt.java:52)
    at Unknown.ki(SchedulerImpl.java:180)
    at Unknown.bi(SchedulerImpl.java:345)
    at Unknown.oi(SchedulerImpl.java:78)
    at Unknown.ii(SchedulerImpl.java:138)
    at Unknown.Kh(Impl.java:290)
    at Unknown.Oh(Impl.java:347)
    at Unknown.anonymous(Impl.java:93)
    at Unknown.anonymous(UnloadSupport.java:42)

我必须做些什么才能使服务器端的反混淆在样式混淆的生产环境中工作?

编辑:

即使我不使用:

符号地图 WEB-INF/deploy/testgwt/symbolMaps/

它不会改变任何东西。 symbolMaps 文件夹的路径似乎是正确的。其中还有一些文件是在我的 Eclipse Web 应用程序项目中的 gwt comile 之后生成的。查看我制作的这个演示 eclipse gwt 项目:https://github.com/confile/gwtlogtest

编辑:我在 Tomcat 7.0.52 服务器上运行我的应用程序。在我的 catalina.log 中有以下警告:

Feb 21, 2014 12:08:11 AM com.allen_sauer.gwt.log.server.ServerLogImplJDK14 log
WARNING: Servlet configuration parameter 'symbolMaps' specifies directory
'WEB-INF/deploy/testgwt/symbolMaps/' which does not exist or is not relative 
 to your server's current working directory '/'

Feb 21, 2014 12:08:11 AM com.allen_sauer.gwt.log.server.ServerLogImplJDK14 log
WARNING: In order to enable stack trace deobfuscation, please specify 
the 'symbolMaps' <init-param> for the com.allen_sauer.gwt.log.server.RemoteLoggerServlet servlet in your web.xml

似乎找不到符号映射。我检查了它就在这条路径上。

【问题讨论】:

    标签: java javascript html gwt logging


    【解决方案1】:

    你的模块中有这些属性吗?

    <set-property name="compiler.stackMode" value="emulated" />
    <set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true" />
    <set-configuration-property name="compiler.emulatedStack.recordFileNames" value="true" />
    

    请注意,如果您希望完全优化生产代码,则应删除这些属性。

    【讨论】:

    • 我将此添加到我的 web.xml 中。看看我的编辑。我仍然没有得到去混淆的堆栈跟踪。
    【解决方案2】:

    这是我的配置,它工作正常: 客户端配置(Task.gwt.xml):

    <!-- Enabling server side logging: -->
    <inherits name="com.google.gwt.logging.Logging"/>
    <set-property name="gwt.logging.logLevel" value="SEVERE"/>
    <set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" />
    <!-- To show line number of occurred exception in server side logging (This will increase compiled js size): -->
    <set-property name="compiler.stackMode" value="emulated"/>
    <set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true"/>
    <set-configuration-property name="compiler.emulatedStack.recordFileNames" value="true"/>
    
    <set-property name="gwt.logging.enabled" value="TRUE" />
    <set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />
    <set-property name="gwt.logging.systemHandler" value="ENABLED" />
    <set-property name="gwt.logging.popupHandler" value="DISABLED" />
    <set-property name="gwt.logging.consoleHandler" value="ENABLED" />
    <set-property name="gwt.logging.firebugHandler" value="ENABLED" />
    

    服务器端配置(web.xml):

    <!-- gwt remote logging -->
    <servlet>
        <servlet-name>remoteLogging</servlet-name>
        <servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>remoteLogging</servlet-name>
        <url-pattern>/gwt/ir.asta.zrm.cm.gwt.Task/remote_logging</url-pattern>
    </servlet-mapping>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多